KILLED proof of input_jtSlOxgEDE.trs # AProVE Commit ID: aff8ecad908e01718a4c36e68d2e55d5e0f16e15 fuhs 20220216 unpublished The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). (0) CpxTRS (1) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (2) CpxTRS (3) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] (4) CpxTRS (5) RelTrsToWeightedTrsProof [UPPER BOUND(ID), 0 ms] (6) CpxWeightedTrs (7) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CpxTypedWeightedTrs (9) CompletionProof [UPPER BOUND(ID), 0 ms] (10) CpxTypedWeightedCompleteTrs (11) NarrowingProof [BOTH BOUNDS(ID, ID), 21 ms] (12) CpxTypedWeightedCompleteTrs (13) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (14) CpxRNTS (15) InliningProof [UPPER BOUND(ID), 0 ms] (16) CpxRNTS (17) SimplificationProof [BOTH BOUNDS(ID, ID), 57 ms] (18) CpxRNTS (19) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 3 ms] (20) CpxRNTS (21) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (22) CpxRNTS (23) IntTrsBoundProof [UPPER BOUND(ID), 146 ms] (24) CpxRNTS (25) IntTrsBoundProof [UPPER BOUND(ID), 8 ms] (26) CpxRNTS (27) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (28) CpxRNTS (29) IntTrsBoundProof [UPPER BOUND(ID), 194 ms] (30) CpxRNTS (31) IntTrsBoundProof [UPPER BOUND(ID), 33 ms] (32) CpxRNTS (33) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (34) CpxRNTS (35) IntTrsBoundProof [UPPER BOUND(ID), 103 ms] (36) CpxRNTS (37) IntTrsBoundProof [UPPER BOUND(ID), 3 ms] (38) CpxRNTS (39) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (40) CpxRNTS (41) IntTrsBoundProof [UPPER BOUND(ID), 131 ms] (42) CpxRNTS (43) IntTrsBoundProof [UPPER BOUND(ID), 55 ms] (44) CpxRNTS (45) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (46) CpxRNTS (47) IntTrsBoundProof [UPPER BOUND(ID), 313 ms] (48) CpxRNTS (49) IntTrsBoundProof [UPPER BOUND(ID), 127 ms] (50) CpxRNTS (51) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (52) CpxRNTS (53) IntTrsBoundProof [UPPER BOUND(ID), 342 ms] (54) CpxRNTS (55) IntTrsBoundProof [UPPER BOUND(ID), 95 ms] (56) CpxRNTS (57) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (58) CpxRNTS (59) IntTrsBoundProof [UPPER BOUND(ID), 79 ms] (60) CpxRNTS (61) IntTrsBoundProof [UPPER BOUND(ID), 72 ms] (62) CpxRNTS (63) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (64) CpxRNTS (65) IntTrsBoundProof [UPPER BOUND(ID), 106.5 s] (66) CpxRNTS (67) IntTrsBoundProof [UPPER BOUND(ID), 41.6 s] (68) CpxRNTS (69) CompletionProof [UPPER BOUND(ID), 35 ms] (70) CpxTypedWeightedCompleteTrs (71) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (72) CpxRNTS (73) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (74) CdtProblem (75) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (76) CdtProblem (77) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (78) CdtProblem (79) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 4 ms] (80) CdtProblem (81) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 2 ms] (82) CdtProblem (83) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (84) CdtProblem (85) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (86) CdtProblem (87) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 84 ms] (88) CdtProblem (89) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (90) CdtProblem (91) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (92) CdtProblem (93) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 91 ms] (94) CdtProblem (95) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (96) CdtProblem (97) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (98) CdtProblem (99) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (100) CdtProblem (101) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 104 ms] (102) CdtProblem (103) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 4 ms] (104) CdtProblem (105) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (106) CdtProblem (107) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (108) CdtProblem (109) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 128 ms] (110) CdtProblem (111) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (112) CdtProblem (113) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (114) CdtProblem (115) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (116) CdtProblem (117) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (118) CdtProblem (119) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (120) CdtProblem (121) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (122) CdtProblem (123) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (124) CdtProblem (125) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (126) CdtProblem (127) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (128) CdtProblem (129) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (130) CdtProblem (131) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (132) CdtProblem (133) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (134) CdtProblem (135) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (136) CdtProblem (137) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (138) CdtProblem (139) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (140) CdtProblem (141) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (142) CdtProblem (143) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 172 ms] (144) CdtProblem (145) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 250 ms] (146) CdtProblem (147) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (148) CdtProblem (149) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (150) CdtProblem (151) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 4 ms] (152) CdtProblem (153) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (154) CdtProblem (155) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (156) CdtProblem (157) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (158) CdtProblem (159) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (160) CdtProblem (161) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (162) CdtProblem (163) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (164) CdtProblem (165) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (166) CdtProblem (167) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 269 ms] (168) CdtProblem (169) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (170) CdtProblem (171) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (172) CdtProblem (173) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (174) CdtProblem (175) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (176) CdtProblem (177) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (178) CdtProblem (179) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (180) CdtProblem (181) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (182) CdtProblem (183) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (184) CdtProblem (185) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (186) CdtProblem (187) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (188) CdtProblem (189) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (190) CdtProblem (191) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (192) CdtProblem (193) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 422 ms] (194) CdtProblem (195) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 331 ms] (196) CdtProblem (197) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (198) CdtProblem (199) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (200) CdtProblem (201) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (202) CdtProblem (203) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (204) CdtProblem (205) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (206) CdtProblem (207) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (208) CdtProblem (209) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (210) CdtProblem (211) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (212) CdtProblem (213) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (214) CdtProblem (215) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (216) CdtProblem (217) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (218) CdtProblem (219) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (220) CdtProblem (221) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (222) CdtProblem (223) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (224) CdtProblem (225) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 550 ms] (226) CdtProblem (227) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 508 ms] (228) CdtProblem (229) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (230) CdtProblem (231) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (232) CdtProblem (233) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (234) CdtProblem (235) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (236) CdtProblem (237) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (238) CdtProblem (239) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (240) CdtProblem (241) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (242) CdtProblem (243) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (244) CdtProblem (245) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (246) CdtProblem (247) CdtRewritingProof [BOTH BOUNDS(ID, ID), 9 ms] (248) CdtProblem (249) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (250) CdtProblem (251) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (252) CdtProblem (253) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (254) CdtProblem (255) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (256) CdtProblem (257) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (258) CdtProblem ---------------------------------------- (0) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: eq(0, 0) -> true eq(0, s(x)) -> false eq(s(x), 0) -> false eq(s(x), s(y)) -> eq(x, y) or(true, y) -> true or(false, y) -> y union(empty, h) -> h union(edge(x, y, i), h) -> edge(x, y, union(i, h)) isEmpty(empty) -> true isEmpty(edge(x, y, i)) -> false from(edge(x, y, i)) -> x to(edge(x, y, i)) -> y rest(edge(x, y, i)) -> i rest(empty) -> empty reach(x, y, i, h) -> if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h) if1(true, b1, b2, b3, x, y, i, h) -> true if1(false, b1, b2, b3, x, y, i, h) -> if2(b1, b2, b3, x, y, i, h) if2(true, b2, b3, x, y, i, h) -> false if2(false, b2, b3, x, y, i, h) -> if3(b2, b3, x, y, i, h) if3(false, b3, x, y, i, h) -> reach(x, y, rest(i), edge(from(i), to(i), h)) if3(true, b3, x, y, i, h) -> if4(b3, x, y, i, h) if4(true, x, y, i, h) -> true if4(false, x, y, i, h) -> or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty)) S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (1) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (2) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: eq(0', 0') -> true eq(0', s(x)) -> false eq(s(x), 0') -> false eq(s(x), s(y)) -> eq(x, y) or(true, y) -> true or(false, y) -> y union(empty, h) -> h union(edge(x, y, i), h) -> edge(x, y, union(i, h)) isEmpty(empty) -> true isEmpty(edge(x, y, i)) -> false from(edge(x, y, i)) -> x to(edge(x, y, i)) -> y rest(edge(x, y, i)) -> i rest(empty) -> empty reach(x, y, i, h) -> if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h) if1(true, b1, b2, b3, x, y, i, h) -> true if1(false, b1, b2, b3, x, y, i, h) -> if2(b1, b2, b3, x, y, i, h) if2(true, b2, b3, x, y, i, h) -> false if2(false, b2, b3, x, y, i, h) -> if3(b2, b3, x, y, i, h) if3(false, b3, x, y, i, h) -> reach(x, y, rest(i), edge(from(i), to(i), h)) if3(true, b3, x, y, i, h) -> if4(b3, x, y, i, h) if4(true, x, y, i, h) -> true if4(false, x, y, i, h) -> or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty)) S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (3) RelTrsToTrsProof (UPPER BOUND(ID)) transformed relative TRS to TRS ---------------------------------------- (4) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: eq(0, 0) -> true eq(0, s(x)) -> false eq(s(x), 0) -> false eq(s(x), s(y)) -> eq(x, y) or(true, y) -> true or(false, y) -> y union(empty, h) -> h union(edge(x, y, i), h) -> edge(x, y, union(i, h)) isEmpty(empty) -> true isEmpty(edge(x, y, i)) -> false from(edge(x, y, i)) -> x to(edge(x, y, i)) -> y rest(edge(x, y, i)) -> i rest(empty) -> empty reach(x, y, i, h) -> if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h) if1(true, b1, b2, b3, x, y, i, h) -> true if1(false, b1, b2, b3, x, y, i, h) -> if2(b1, b2, b3, x, y, i, h) if2(true, b2, b3, x, y, i, h) -> false if2(false, b2, b3, x, y, i, h) -> if3(b2, b3, x, y, i, h) if3(false, b3, x, y, i, h) -> reach(x, y, rest(i), edge(from(i), to(i), h)) if3(true, b3, x, y, i, h) -> if4(b3, x, y, i, h) if4(true, x, y, i, h) -> true if4(false, x, y, i, h) -> or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty)) S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (5) RelTrsToWeightedTrsProof (UPPER BOUND(ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (6) Obligation: The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: eq(0, 0) -> true [1] eq(0, s(x)) -> false [1] eq(s(x), 0) -> false [1] eq(s(x), s(y)) -> eq(x, y) [1] or(true, y) -> true [1] or(false, y) -> y [1] union(empty, h) -> h [1] union(edge(x, y, i), h) -> edge(x, y, union(i, h)) [1] isEmpty(empty) -> true [1] isEmpty(edge(x, y, i)) -> false [1] from(edge(x, y, i)) -> x [1] to(edge(x, y, i)) -> y [1] rest(edge(x, y, i)) -> i [1] rest(empty) -> empty [1] reach(x, y, i, h) -> if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h) [1] if1(true, b1, b2, b3, x, y, i, h) -> true [1] if1(false, b1, b2, b3, x, y, i, h) -> if2(b1, b2, b3, x, y, i, h) [1] if2(true, b2, b3, x, y, i, h) -> false [1] if2(false, b2, b3, x, y, i, h) -> if3(b2, b3, x, y, i, h) [1] if3(false, b3, x, y, i, h) -> reach(x, y, rest(i), edge(from(i), to(i), h)) [1] if3(true, b3, x, y, i, h) -> if4(b3, x, y, i, h) [1] if4(true, x, y, i, h) -> true [1] if4(false, x, y, i, h) -> or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty)) [1] Rewrite Strategy: INNERMOST ---------------------------------------- (7) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (8) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: eq(0, 0) -> true [1] eq(0, s(x)) -> false [1] eq(s(x), 0) -> false [1] eq(s(x), s(y)) -> eq(x, y) [1] or(true, y) -> true [1] or(false, y) -> y [1] union(empty, h) -> h [1] union(edge(x, y, i), h) -> edge(x, y, union(i, h)) [1] isEmpty(empty) -> true [1] isEmpty(edge(x, y, i)) -> false [1] from(edge(x, y, i)) -> x [1] to(edge(x, y, i)) -> y [1] rest(edge(x, y, i)) -> i [1] rest(empty) -> empty [1] reach(x, y, i, h) -> if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h) [1] if1(true, b1, b2, b3, x, y, i, h) -> true [1] if1(false, b1, b2, b3, x, y, i, h) -> if2(b1, b2, b3, x, y, i, h) [1] if2(true, b2, b3, x, y, i, h) -> false [1] if2(false, b2, b3, x, y, i, h) -> if3(b2, b3, x, y, i, h) [1] if3(false, b3, x, y, i, h) -> reach(x, y, rest(i), edge(from(i), to(i), h)) [1] if3(true, b3, x, y, i, h) -> if4(b3, x, y, i, h) [1] if4(true, x, y, i, h) -> true [1] if4(false, x, y, i, h) -> or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty)) [1] The TRS has the following type information: eq :: 0:s -> 0:s -> true:false 0 :: 0:s true :: true:false s :: 0:s -> 0:s false :: true:false or :: true:false -> true:false -> true:false union :: empty:edge -> empty:edge -> empty:edge empty :: empty:edge edge :: 0:s -> 0:s -> empty:edge -> empty:edge isEmpty :: empty:edge -> true:false from :: empty:edge -> 0:s to :: empty:edge -> 0:s rest :: empty:edge -> empty:edge reach :: 0:s -> 0:s -> empty:edge -> empty:edge -> true:false if1 :: true:false -> true:false -> true:false -> true:false -> 0:s -> 0:s -> empty:edge -> empty:edge -> true:false if2 :: true:false -> true:false -> true:false -> 0:s -> 0:s -> empty:edge -> empty:edge -> true:false if3 :: true:false -> true:false -> 0:s -> 0:s -> empty:edge -> empty:edge -> true:false if4 :: true:false -> 0:s -> 0:s -> empty:edge -> empty:edge -> true:false Rewrite Strategy: INNERMOST ---------------------------------------- (9) CompletionProof (UPPER BOUND(ID)) The transformation into a RNTS is sound, since: (a) The obligation is a constructor system where every type has a constant constructor, (b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols: none (c) The following functions are completely defined: eq_2 isEmpty_1 from_1 to_1 rest_1 reach_4 union_2 if1_8 if2_7 if3_6 if4_5 or_2 Due to the following rules being added: from(v0) -> 0 [0] to(v0) -> 0 [0] And the following fresh constants: none ---------------------------------------- (10) Obligation: Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: eq(0, 0) -> true [1] eq(0, s(x)) -> false [1] eq(s(x), 0) -> false [1] eq(s(x), s(y)) -> eq(x, y) [1] or(true, y) -> true [1] or(false, y) -> y [1] union(empty, h) -> h [1] union(edge(x, y, i), h) -> edge(x, y, union(i, h)) [1] isEmpty(empty) -> true [1] isEmpty(edge(x, y, i)) -> false [1] from(edge(x, y, i)) -> x [1] to(edge(x, y, i)) -> y [1] rest(edge(x, y, i)) -> i [1] rest(empty) -> empty [1] reach(x, y, i, h) -> if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h) [1] if1(true, b1, b2, b3, x, y, i, h) -> true [1] if1(false, b1, b2, b3, x, y, i, h) -> if2(b1, b2, b3, x, y, i, h) [1] if2(true, b2, b3, x, y, i, h) -> false [1] if2(false, b2, b3, x, y, i, h) -> if3(b2, b3, x, y, i, h) [1] if3(false, b3, x, y, i, h) -> reach(x, y, rest(i), edge(from(i), to(i), h)) [1] if3(true, b3, x, y, i, h) -> if4(b3, x, y, i, h) [1] if4(true, x, y, i, h) -> true [1] if4(false, x, y, i, h) -> or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty)) [1] from(v0) -> 0 [0] to(v0) -> 0 [0] The TRS has the following type information: eq :: 0:s -> 0:s -> true:false 0 :: 0:s true :: true:false s :: 0:s -> 0:s false :: true:false or :: true:false -> true:false -> true:false union :: empty:edge -> empty:edge -> empty:edge empty :: empty:edge edge :: 0:s -> 0:s -> empty:edge -> empty:edge isEmpty :: empty:edge -> true:false from :: empty:edge -> 0:s to :: empty:edge -> 0:s rest :: empty:edge -> empty:edge reach :: 0:s -> 0:s -> empty:edge -> empty:edge -> true:false if1 :: true:false -> true:false -> true:false -> true:false -> 0:s -> 0:s -> empty:edge -> empty:edge -> true:false if2 :: true:false -> true:false -> true:false -> 0:s -> 0:s -> empty:edge -> empty:edge -> true:false if3 :: true:false -> true:false -> 0:s -> 0:s -> empty:edge -> empty:edge -> true:false if4 :: true:false -> 0:s -> 0:s -> empty:edge -> empty:edge -> true:false Rewrite Strategy: INNERMOST ---------------------------------------- (11) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (12) Obligation: Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: eq(0, 0) -> true [1] eq(0, s(x)) -> false [1] eq(s(x), 0) -> false [1] eq(s(x), s(y)) -> eq(x, y) [1] or(true, y) -> true [1] or(false, y) -> y [1] union(empty, h) -> h [1] union(edge(x, y, i), h) -> edge(x, y, union(i, h)) [1] isEmpty(empty) -> true [1] isEmpty(edge(x, y, i)) -> false [1] from(edge(x, y, i)) -> x [1] to(edge(x, y, i)) -> y [1] rest(edge(x, y, i)) -> i [1] rest(empty) -> empty [1] reach(0, 0, empty, h) -> if1(true, true, eq(0, 0), eq(0, 0), 0, 0, empty, h) [3] reach(0, 0, edge(x2, y'', i'), h) -> if1(true, false, eq(0, x2), eq(0, y''), 0, 0, edge(x2, y'', i'), h) [5] reach(0, 0, edge(x2, y'', i'), h) -> if1(true, false, eq(0, x2), eq(0, 0), 0, 0, edge(x2, y'', i'), h) [4] reach(0, 0, edge(x2, y'', i'), h) -> if1(true, false, eq(0, 0), eq(0, y''), 0, 0, edge(x2, y'', i'), h) [4] reach(0, 0, edge(x2, y'', i'), h) -> if1(true, false, eq(0, 0), eq(0, 0), 0, 0, edge(x2, y'', i'), h) [3] reach(0, s(x'), empty, h) -> if1(false, true, eq(0, 0), eq(s(x'), 0), 0, s(x'), empty, h) [3] reach(0, s(x'), edge(x3, y1, i''), h) -> if1(false, false, eq(0, x3), eq(s(x'), y1), 0, s(x'), edge(x3, y1, i''), h) [5] reach(0, s(x'), edge(x3, y1, i''), h) -> if1(false, false, eq(0, x3), eq(s(x'), 0), 0, s(x'), edge(x3, y1, i''), h) [4] reach(0, s(x'), edge(x3, y1, i''), h) -> if1(false, false, eq(0, 0), eq(s(x'), y1), 0, s(x'), edge(x3, y1, i''), h) [4] reach(0, s(x'), edge(x3, y1, i''), h) -> if1(false, false, eq(0, 0), eq(s(x'), 0), 0, s(x'), edge(x3, y1, i''), h) [3] reach(s(x''), 0, empty, h) -> if1(false, true, eq(s(x''), 0), eq(0, 0), s(x''), 0, empty, h) [3] reach(s(x''), 0, edge(x4, y2, i1), h) -> if1(false, false, eq(s(x''), x4), eq(0, y2), s(x''), 0, edge(x4, y2, i1), h) [5] reach(s(x''), 0, edge(x4, y2, i1), h) -> if1(false, false, eq(s(x''), x4), eq(0, 0), s(x''), 0, edge(x4, y2, i1), h) [4] reach(s(x''), 0, edge(x4, y2, i1), h) -> if1(false, false, eq(s(x''), 0), eq(0, y2), s(x''), 0, edge(x4, y2, i1), h) [4] reach(s(x''), 0, edge(x4, y2, i1), h) -> if1(false, false, eq(s(x''), 0), eq(0, 0), s(x''), 0, edge(x4, y2, i1), h) [3] reach(s(x1), s(y'), empty, h) -> if1(eq(x1, y'), true, eq(s(x1), 0), eq(s(y'), 0), s(x1), s(y'), empty, h) [3] reach(s(x1), s(y'), edge(x5, y3, i2), h) -> if1(eq(x1, y'), false, eq(s(x1), x5), eq(s(y'), y3), s(x1), s(y'), edge(x5, y3, i2), h) [5] reach(s(x1), s(y'), edge(x5, y3, i2), h) -> if1(eq(x1, y'), false, eq(s(x1), x5), eq(s(y'), 0), s(x1), s(y'), edge(x5, y3, i2), h) [4] reach(s(x1), s(y'), edge(x5, y3, i2), h) -> if1(eq(x1, y'), false, eq(s(x1), 0), eq(s(y'), y3), s(x1), s(y'), edge(x5, y3, i2), h) [4] reach(s(x1), s(y'), edge(x5, y3, i2), h) -> if1(eq(x1, y'), false, eq(s(x1), 0), eq(s(y'), 0), s(x1), s(y'), edge(x5, y3, i2), h) [3] if1(true, b1, b2, b3, x, y, i, h) -> true [1] if1(false, b1, b2, b3, x, y, i, h) -> if2(b1, b2, b3, x, y, i, h) [1] if2(true, b2, b3, x, y, i, h) -> false [1] if2(false, b2, b3, x, y, i, h) -> if3(b2, b3, x, y, i, h) [1] if3(false, b3, x, y, edge(x6, y4, i3), h) -> reach(x, y, i3, edge(x6, y4, h)) [4] if3(false, b3, x, y, edge(x6, y4, i3), h) -> reach(x, y, i3, edge(x6, 0, h)) [3] if3(false, b3, x, y, edge(x6, y4, i3), h) -> reach(x, y, i3, edge(0, y4, h)) [3] if3(false, b3, x, y, edge(x6, y4, i3), h) -> reach(x, y, i3, edge(0, 0, h)) [2] if3(false, b3, x, y, empty, h) -> reach(x, y, empty, edge(0, 0, h)) [2] if3(true, b3, x, y, i, h) -> if4(b3, x, y, i, h) [1] if4(true, x, y, i, h) -> true [1] if4(false, x, y, edge(x7, y5, i4), h) -> or(reach(x, y, i4, h), reach(y5, y, union(i4, h), empty)) [4] if4(false, x, y, edge(x7, y5, i4), h) -> or(reach(x, y, i4, h), reach(0, y, union(i4, h), empty)) [3] if4(false, x, y, empty, h) -> or(reach(x, y, empty, h), reach(0, y, union(empty, h), empty)) [3] from(v0) -> 0 [0] to(v0) -> 0 [0] The TRS has the following type information: eq :: 0:s -> 0:s -> true:false 0 :: 0:s true :: true:false s :: 0:s -> 0:s false :: true:false or :: true:false -> true:false -> true:false union :: empty:edge -> empty:edge -> empty:edge empty :: empty:edge edge :: 0:s -> 0:s -> empty:edge -> empty:edge isEmpty :: empty:edge -> true:false from :: empty:edge -> 0:s to :: empty:edge -> 0:s rest :: empty:edge -> empty:edge reach :: 0:s -> 0:s -> empty:edge -> empty:edge -> true:false if1 :: true:false -> true:false -> true:false -> true:false -> 0:s -> 0:s -> empty:edge -> empty:edge -> true:false if2 :: true:false -> true:false -> true:false -> 0:s -> 0:s -> empty:edge -> empty:edge -> true:false if3 :: true:false -> true:false -> 0:s -> 0:s -> empty:edge -> empty:edge -> true:false if4 :: true:false -> 0:s -> 0:s -> empty:edge -> empty:edge -> true:false Rewrite Strategy: INNERMOST ---------------------------------------- (13) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: 0 => 0 true => 1 false => 0 empty => 0 ---------------------------------------- (14) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(x, y) :|: z' = 1 + y, x >= 0, y >= 0, z = 1 + x eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' = 1 + x, x >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: x >= 0, z = 1 + x, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(b1, b2, b3, x, y, i, h) :|: z2 = x, b1 >= 0, z1 = b3, z3 = y, y >= 0, z4 = i, z5 = h, i >= 0, h >= 0, z' = b1, z = 0, z'' = b2, b3 >= 0, b2 >= 0, x >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z2 = x, b1 >= 0, z = 1, z1 = b3, z3 = y, y >= 0, z4 = i, z5 = h, i >= 0, h >= 0, z' = b1, z'' = b2, b3 >= 0, b2 >= 0, x >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(b2, b3, x, y, i, h) :|: z3 = i, z4 = h, y >= 0, i >= 0, z' = b2, h >= 0, z = 0, z'' = b3, z1 = x, b3 >= 0, b2 >= 0, z2 = y, x >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z3 = i, z4 = h, y >= 0, i >= 0, z' = b2, h >= 0, z'' = b3, z1 = x, b3 >= 0, b2 >= 0, z2 = y, x >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(x, y, i3, 1 + x6 + y4 + h) :|: z1 = y, z' = b3, y >= 0, h >= 0, y4 >= 0, z = 0, b3 >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z3 = h, x >= 0, x6 >= 0, z'' = x if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(x, y, i3, 1 + x6 + 0 + h) :|: z1 = y, z' = b3, y >= 0, h >= 0, y4 >= 0, z = 0, b3 >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z3 = h, x >= 0, x6 >= 0, z'' = x if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(x, y, i3, 1 + 0 + y4 + h) :|: z1 = y, z' = b3, y >= 0, h >= 0, y4 >= 0, z = 0, b3 >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z3 = h, x >= 0, x6 >= 0, z'' = x if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(x, y, i3, 1 + 0 + 0 + h) :|: z1 = y, z' = b3, y >= 0, h >= 0, y4 >= 0, z = 0, b3 >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z3 = h, x >= 0, x6 >= 0, z'' = x if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(x, y, 0, 1 + 0 + 0 + h) :|: z1 = y, z3 = h, z' = b3, z2 = 0, x >= 0, y >= 0, z'' = x, h >= 0, z = 0, b3 >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(b3, x, y, i, h) :|: z1 = y, z2 = i, z3 = h, z' = b3, z = 1, x >= 0, y >= 0, i >= 0, z'' = x, h >= 0, b3 >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(x, y, i4, h), reach(y5, y, union(i4, h), 0)) :|: y5 >= 0, z' = x, z'' = y, x7 >= 0, x >= 0, y >= 0, h >= 0, z = 0, z2 = h, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(x, y, i4, h), reach(0, y, union(i4, h), 0)) :|: y5 >= 0, z' = x, z'' = y, x7 >= 0, x >= 0, y >= 0, h >= 0, z = 0, z2 = h, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(x, y, 0, h), reach(0, y, union(0, h), 0)) :|: z1 = 0, z' = x, z'' = y, x >= 0, y >= 0, h >= 0, z = 0, z2 = h if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z' = x, z'' = y, z = 1, x >= 0, y >= 0, i >= 0, h >= 0, z1 = i, z2 = h isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> y :|: y >= 0, z = 0, z' = y or(z, z') -{ 1 }-> 1 :|: z = 1, y >= 0, z' = y reach(z, z', z'', z1) -{ 3 }-> if1(eq(x1, y'), 1, eq(1 + x1, 0), eq(1 + y', 0), 1 + x1, 1 + y', 0, h) :|: z'' = 0, x1 >= 0, z = 1 + x1, y' >= 0, h >= 0, z' = 1 + y', z1 = h reach(z, z', z'', z1) -{ 5 }-> if1(eq(x1, y'), 0, eq(1 + x1, x5), eq(1 + y', y3), 1 + x1, 1 + y', 1 + x5 + y3 + i2, h) :|: x1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z = 1 + x1, y' >= 0, y3 >= 0, h >= 0, z' = 1 + y', i2 >= 0, z1 = h reach(z, z', z'', z1) -{ 4 }-> if1(eq(x1, y'), 0, eq(1 + x1, x5), eq(1 + y', 0), 1 + x1, 1 + y', 1 + x5 + y3 + i2, h) :|: x1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z = 1 + x1, y' >= 0, y3 >= 0, h >= 0, z' = 1 + y', i2 >= 0, z1 = h reach(z, z', z'', z1) -{ 4 }-> if1(eq(x1, y'), 0, eq(1 + x1, 0), eq(1 + y', y3), 1 + x1, 1 + y', 1 + x5 + y3 + i2, h) :|: x1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z = 1 + x1, y' >= 0, y3 >= 0, h >= 0, z' = 1 + y', i2 >= 0, z1 = h reach(z, z', z'', z1) -{ 3 }-> if1(eq(x1, y'), 0, eq(1 + x1, 0), eq(1 + y', 0), 1 + x1, 1 + y', 1 + x5 + y3 + i2, h) :|: x1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z = 1 + x1, y' >= 0, y3 >= 0, h >= 0, z' = 1 + y', i2 >= 0, z1 = h reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, h) :|: z'' = 0, h >= 0, z = 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', h) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, h >= 0, z = 0, x2 >= 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', h) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, h >= 0, z = 0, x2 >= 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', h) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, h >= 0, z = 0, x2 >= 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', h) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, h >= 0, z = 0, x2 >= 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + x', 0), 0, 1 + x', 0, h) :|: z'' = 0, z' = 1 + x', x' >= 0, h >= 0, z = 0, z1 = h reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + x'', 0), eq(0, 0), 1 + x'', 0, 0, h) :|: z = 1 + x'', z'' = 0, h >= 0, x'' >= 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + x', y1), 0, 1 + x', 1 + x3 + y1 + i'', h) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' = 1 + x', x' >= 0, h >= 0, z = 0, x3 >= 0, z1 = h reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + x', 0), 0, 1 + x', 1 + x3 + y1 + i'', h) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' = 1 + x', x' >= 0, h >= 0, z = 0, x3 >= 0, z1 = h reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + x', y1), 0, 1 + x', 1 + x3 + y1 + i'', h) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' = 1 + x', x' >= 0, h >= 0, z = 0, x3 >= 0, z1 = h reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + x', 0), 0, 1 + x', 1 + x3 + y1 + i'', h) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' = 1 + x', x' >= 0, h >= 0, z = 0, x3 >= 0, z1 = h reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + x'', x4), eq(0, y2), 1 + x'', 0, 1 + x4 + y2 + i1, h) :|: z = 1 + x'', x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, h >= 0, x'' >= 0, y2 >= 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + x'', x4), eq(0, 0), 1 + x'', 0, 1 + x4 + y2 + i1, h) :|: z = 1 + x'', x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, h >= 0, x'' >= 0, y2 >= 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + x'', 0), eq(0, y2), 1 + x'', 0, 1 + x4 + y2 + i1, h) :|: z = 1 + x'', x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, h >= 0, x'' >= 0, y2 >= 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + x'', 0), eq(0, 0), 1 + x'', 0, 1 + x4 + y2 + i1, h) :|: z = 1 + x'', x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, h >= 0, x'' >= 0, y2 >= 0, z' = 0, z1 = h rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 union(z, z') -{ 1 }-> h :|: z' = h, h >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, h) :|: z' = h, x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, h >= 0 ---------------------------------------- (15) InliningProof (UPPER BOUND(ID)) Inlined the following terminating rules on right-hand sides where appropriate: or(z, z') -{ 1 }-> 1 :|: z = 1, y >= 0, z' = y or(z, z') -{ 1 }-> y :|: y >= 0, z = 0, z' = y ---------------------------------------- (16) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(x, y) :|: z' = 1 + y, x >= 0, y >= 0, z = 1 + x eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' = 1 + x, x >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: x >= 0, z = 1 + x, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(b1, b2, b3, x, y, i, h) :|: z2 = x, b1 >= 0, z1 = b3, z3 = y, y >= 0, z4 = i, z5 = h, i >= 0, h >= 0, z' = b1, z = 0, z'' = b2, b3 >= 0, b2 >= 0, x >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z2 = x, b1 >= 0, z = 1, z1 = b3, z3 = y, y >= 0, z4 = i, z5 = h, i >= 0, h >= 0, z' = b1, z'' = b2, b3 >= 0, b2 >= 0, x >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(b2, b3, x, y, i, h) :|: z3 = i, z4 = h, y >= 0, i >= 0, z' = b2, h >= 0, z = 0, z'' = b3, z1 = x, b3 >= 0, b2 >= 0, z2 = y, x >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z3 = i, z4 = h, y >= 0, i >= 0, z' = b2, h >= 0, z'' = b3, z1 = x, b3 >= 0, b2 >= 0, z2 = y, x >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(x, y, i3, 1 + x6 + y4 + h) :|: z1 = y, z' = b3, y >= 0, h >= 0, y4 >= 0, z = 0, b3 >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z3 = h, x >= 0, x6 >= 0, z'' = x if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(x, y, i3, 1 + x6 + 0 + h) :|: z1 = y, z' = b3, y >= 0, h >= 0, y4 >= 0, z = 0, b3 >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z3 = h, x >= 0, x6 >= 0, z'' = x if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(x, y, i3, 1 + 0 + y4 + h) :|: z1 = y, z' = b3, y >= 0, h >= 0, y4 >= 0, z = 0, b3 >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z3 = h, x >= 0, x6 >= 0, z'' = x if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(x, y, i3, 1 + 0 + 0 + h) :|: z1 = y, z' = b3, y >= 0, h >= 0, y4 >= 0, z = 0, b3 >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z3 = h, x >= 0, x6 >= 0, z'' = x if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(x, y, 0, 1 + 0 + 0 + h) :|: z1 = y, z3 = h, z' = b3, z2 = 0, x >= 0, y >= 0, z'' = x, h >= 0, z = 0, b3 >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(b3, x, y, i, h) :|: z1 = y, z2 = i, z3 = h, z' = b3, z = 1, x >= 0, y >= 0, i >= 0, z'' = x, h >= 0, b3 >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(x, y, i4, h), reach(y5, y, union(i4, h), 0)) :|: y5 >= 0, z' = x, z'' = y, x7 >= 0, x >= 0, y >= 0, h >= 0, z = 0, z2 = h, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(x, y, i4, h), reach(0, y, union(i4, h), 0)) :|: y5 >= 0, z' = x, z'' = y, x7 >= 0, x >= 0, y >= 0, h >= 0, z = 0, z2 = h, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(x, y, 0, h), reach(0, y, union(0, h), 0)) :|: z1 = 0, z' = x, z'' = y, x >= 0, y >= 0, h >= 0, z = 0, z2 = h if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z' = x, z'' = y, z = 1, x >= 0, y >= 0, i >= 0, h >= 0, z1 = i, z2 = h isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> y :|: y >= 0, z = 0, z' = y or(z, z') -{ 1 }-> 1 :|: z = 1, y >= 0, z' = y reach(z, z', z'', z1) -{ 3 }-> if1(eq(x1, y'), 1, eq(1 + x1, 0), eq(1 + y', 0), 1 + x1, 1 + y', 0, h) :|: z'' = 0, x1 >= 0, z = 1 + x1, y' >= 0, h >= 0, z' = 1 + y', z1 = h reach(z, z', z'', z1) -{ 5 }-> if1(eq(x1, y'), 0, eq(1 + x1, x5), eq(1 + y', y3), 1 + x1, 1 + y', 1 + x5 + y3 + i2, h) :|: x1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z = 1 + x1, y' >= 0, y3 >= 0, h >= 0, z' = 1 + y', i2 >= 0, z1 = h reach(z, z', z'', z1) -{ 4 }-> if1(eq(x1, y'), 0, eq(1 + x1, x5), eq(1 + y', 0), 1 + x1, 1 + y', 1 + x5 + y3 + i2, h) :|: x1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z = 1 + x1, y' >= 0, y3 >= 0, h >= 0, z' = 1 + y', i2 >= 0, z1 = h reach(z, z', z'', z1) -{ 4 }-> if1(eq(x1, y'), 0, eq(1 + x1, 0), eq(1 + y', y3), 1 + x1, 1 + y', 1 + x5 + y3 + i2, h) :|: x1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z = 1 + x1, y' >= 0, y3 >= 0, h >= 0, z' = 1 + y', i2 >= 0, z1 = h reach(z, z', z'', z1) -{ 3 }-> if1(eq(x1, y'), 0, eq(1 + x1, 0), eq(1 + y', 0), 1 + x1, 1 + y', 1 + x5 + y3 + i2, h) :|: x1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z = 1 + x1, y' >= 0, y3 >= 0, h >= 0, z' = 1 + y', i2 >= 0, z1 = h reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, h) :|: z'' = 0, h >= 0, z = 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', h) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, h >= 0, z = 0, x2 >= 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', h) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, h >= 0, z = 0, x2 >= 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', h) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, h >= 0, z = 0, x2 >= 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', h) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, h >= 0, z = 0, x2 >= 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + x', 0), 0, 1 + x', 0, h) :|: z'' = 0, z' = 1 + x', x' >= 0, h >= 0, z = 0, z1 = h reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + x'', 0), eq(0, 0), 1 + x'', 0, 0, h) :|: z = 1 + x'', z'' = 0, h >= 0, x'' >= 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + x', y1), 0, 1 + x', 1 + x3 + y1 + i'', h) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' = 1 + x', x' >= 0, h >= 0, z = 0, x3 >= 0, z1 = h reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + x', 0), 0, 1 + x', 1 + x3 + y1 + i'', h) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' = 1 + x', x' >= 0, h >= 0, z = 0, x3 >= 0, z1 = h reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + x', y1), 0, 1 + x', 1 + x3 + y1 + i'', h) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' = 1 + x', x' >= 0, h >= 0, z = 0, x3 >= 0, z1 = h reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + x', 0), 0, 1 + x', 1 + x3 + y1 + i'', h) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' = 1 + x', x' >= 0, h >= 0, z = 0, x3 >= 0, z1 = h reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + x'', x4), eq(0, y2), 1 + x'', 0, 1 + x4 + y2 + i1, h) :|: z = 1 + x'', x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, h >= 0, x'' >= 0, y2 >= 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + x'', x4), eq(0, 0), 1 + x'', 0, 1 + x4 + y2 + i1, h) :|: z = 1 + x'', x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, h >= 0, x'' >= 0, y2 >= 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + x'', 0), eq(0, y2), 1 + x'', 0, 1 + x4 + y2 + i1, h) :|: z = 1 + x'', x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, h >= 0, x'' >= 0, y2 >= 0, z' = 0, z1 = h reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + x'', 0), eq(0, 0), 1 + x'', 0, 1 + x4 + y2 + i1, h) :|: z = 1 + x'', x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, h >= 0, x'' >= 0, y2 >= 0, z' = 0, z1 = h rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 union(z, z') -{ 1 }-> h :|: z' = h, h >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, h) :|: z' = h, x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, h >= 0 ---------------------------------------- (17) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (18) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 1, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, z1) :|: z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 0, z1) :|: z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 0, z1) :|: z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 ---------------------------------------- (19) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { to } { from } { isEmpty } { rest } { eq } { union } { or } { if2, if4, reach, if1, if3 } ---------------------------------------- (20) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 1, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, z1) :|: z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 0, z1) :|: z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 0, z1) :|: z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {to}, {from}, {isEmpty}, {rest}, {eq}, {union}, {or}, {if2,if4,reach,if1,if3} ---------------------------------------- (21) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (22) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 1, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, z1) :|: z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 0, z1) :|: z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 0, z1) :|: z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {to}, {from}, {isEmpty}, {rest}, {eq}, {union}, {or}, {if2,if4,reach,if1,if3} ---------------------------------------- (23) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: to after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (24) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 1, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, z1) :|: z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 0, z1) :|: z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 0, z1) :|: z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {to}, {from}, {isEmpty}, {rest}, {eq}, {union}, {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: ?, size: O(n^1) [z] ---------------------------------------- (25) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: to after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (26) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 1, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, z1) :|: z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 0, z1) :|: z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 0, z1) :|: z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {from}, {isEmpty}, {rest}, {eq}, {union}, {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] ---------------------------------------- (27) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (28) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 1, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, z1) :|: z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 0, z1) :|: z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 0, z1) :|: z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {from}, {isEmpty}, {rest}, {eq}, {union}, {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] ---------------------------------------- (29) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: from after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (30) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 1, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, z1) :|: z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 0, z1) :|: z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 0, z1) :|: z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {from}, {isEmpty}, {rest}, {eq}, {union}, {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: ?, size: O(n^1) [z] ---------------------------------------- (31) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: from after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (32) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 1, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, z1) :|: z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 0, z1) :|: z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 0, z1) :|: z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {isEmpty}, {rest}, {eq}, {union}, {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] ---------------------------------------- (33) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (34) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 1, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, z1) :|: z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 0, z1) :|: z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 0, z1) :|: z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {isEmpty}, {rest}, {eq}, {union}, {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] ---------------------------------------- (35) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: isEmpty after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (36) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 1, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, z1) :|: z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 0, z1) :|: z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 0, z1) :|: z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {isEmpty}, {rest}, {eq}, {union}, {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] isEmpty: runtime: ?, size: O(1) [1] ---------------------------------------- (37) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: isEmpty after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (38) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 1, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, z1) :|: z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 0, z1) :|: z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 0, z1) :|: z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {rest}, {eq}, {union}, {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] isEmpty: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (39) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (40) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 1, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, z1) :|: z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 0, z1) :|: z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 0, z1) :|: z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {rest}, {eq}, {union}, {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] isEmpty: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (41) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: rest after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (42) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 1, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, z1) :|: z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 0, z1) :|: z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 0, z1) :|: z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {rest}, {eq}, {union}, {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] isEmpty: runtime: O(1) [1], size: O(1) [1] rest: runtime: ?, size: O(n^1) [z] ---------------------------------------- (43) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: rest after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (44) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 1, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, z1) :|: z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 0, z1) :|: z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 0, z1) :|: z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {eq}, {union}, {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] isEmpty: runtime: O(1) [1], size: O(1) [1] rest: runtime: O(1) [1], size: O(n^1) [z] ---------------------------------------- (45) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (46) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 1, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, z1) :|: z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 0, z1) :|: z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 0, z1) :|: z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {eq}, {union}, {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] isEmpty: runtime: O(1) [1], size: O(1) [1] rest: runtime: O(1) [1], size: O(n^1) [z] ---------------------------------------- (47) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: eq after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (48) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 1, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, z1) :|: z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 0, z1) :|: z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 0, z1) :|: z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {eq}, {union}, {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] isEmpty: runtime: O(1) [1], size: O(1) [1] rest: runtime: O(1) [1], size: O(n^1) [z] eq: runtime: ?, size: O(1) [1] ---------------------------------------- (49) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: eq after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 3 + z' ---------------------------------------- (50) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 1, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), x5), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), y3), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(eq(z - 1, z' - 1), 0, eq(1 + (z - 1), 0), eq(1 + (z' - 1), 0), 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 1, eq(0, 0), eq(0, 0), 0, 0, 0, z1) :|: z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(1, 0, eq(0, x2), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, x2), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(1, 0, eq(0, 0), eq(0, y''), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(1, 0, eq(0, 0), eq(0, 0), 0, 0, 1 + x2 + y'' + i', z1) :|: z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 0, z1) :|: z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 1, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 0, z1) :|: z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, x3), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), y1), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(0, 0), eq(1 + (z' - 1), 0), 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 5 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), x4), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 4 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, y2), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 3 }-> if1(0, 0, eq(1 + (z - 1), 0), eq(0, 0), 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {union}, {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] isEmpty: runtime: O(1) [1], size: O(1) [1] rest: runtime: O(1) [1], size: O(n^1) [z] eq: runtime: O(n^1) [3 + z'], size: O(1) [1] ---------------------------------------- (51) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (52) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 3 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s29, 1, s30, s31, 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: s29 >= 0, s29 <= 1, s30 >= 0, s30 <= 1, s31 >= 0, s31 <= 1, z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 13 + x5 + y3 + z' }-> if1(s32, 0, s33, s34, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s32 >= 0, s32 <= 1, s33 >= 0, s33 <= 1, s34 >= 0, s34 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + x5 + z' }-> if1(s35, 0, s36, s37, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s35 >= 0, s35 <= 1, s36 >= 0, s36 <= 1, s37 >= 0, s37 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + y3 + z' }-> if1(s38, 0, s39, s40, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s38 >= 0, s38 <= 1, s39 >= 0, s39 <= 1, s40 >= 0, s40 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s41, 0, s42, s43, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s41 >= 0, s41 <= 1, s42 >= 0, s42 <= 1, s43 >= 0, s43 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 1, s', s'', 0, 0, 0, z1) :|: s' >= 0, s' <= 1, s'' >= 0, s'' <= 1, z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 11 + x2 + y'' }-> if1(1, 0, s1, s2, 0, 0, 1 + x2 + y'' + i', z1) :|: s1 >= 0, s1 <= 1, s2 >= 0, s2 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x2 }-> if1(1, 0, s3, s4, 0, 0, 1 + x2 + y'' + i', z1) :|: s3 >= 0, s3 <= 1, s4 >= 0, s4 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y'' }-> if1(1, 0, s5, s6, 0, 0, 1 + x2 + y'' + i', z1) :|: s5 >= 0, s5 <= 1, s6 >= 0, s6 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 0, s7, s8, 0, 0, 1 + x2 + y'' + i', z1) :|: s7 >= 0, s7 <= 1, s8 >= 0, s8 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s19, s20, 1 + (z - 1), 0, 0, z1) :|: s19 >= 0, s19 <= 1, s20 >= 0, s20 <= 1, z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s9, s10, 0, 1 + (z' - 1), 0, z1) :|: s9 >= 0, s9 <= 1, s10 >= 0, s10 <= 1, z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 11 + x3 + y1 }-> if1(0, 0, s11, s12, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s11 >= 0, s11 <= 1, s12 >= 0, s12 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + x3 }-> if1(0, 0, s13, s14, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s13 >= 0, s13 <= 1, s14 >= 0, s14 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + y1 }-> if1(0, 0, s15, s16, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s15 >= 0, s15 <= 1, s16 >= 0, s16 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s17, s18, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s17 >= 0, s17 <= 1, s18 >= 0, s18 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 11 + x4 + y2 }-> if1(0, 0, s21, s22, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s21 >= 0, s21 <= 1, s22 >= 0, s22 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x4 }-> if1(0, 0, s23, s24, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s23 >= 0, s23 <= 1, s24 >= 0, s24 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y2 }-> if1(0, 0, s25, s26, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s25 >= 0, s25 <= 1, s26 >= 0, s26 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s27, s28, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s27 >= 0, s27 <= 1, s28 >= 0, s28 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {union}, {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] isEmpty: runtime: O(1) [1], size: O(1) [1] rest: runtime: O(1) [1], size: O(n^1) [z] eq: runtime: O(n^1) [3 + z'], size: O(1) [1] ---------------------------------------- (53) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: union after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z + z' ---------------------------------------- (54) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 3 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s29, 1, s30, s31, 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: s29 >= 0, s29 <= 1, s30 >= 0, s30 <= 1, s31 >= 0, s31 <= 1, z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 13 + x5 + y3 + z' }-> if1(s32, 0, s33, s34, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s32 >= 0, s32 <= 1, s33 >= 0, s33 <= 1, s34 >= 0, s34 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + x5 + z' }-> if1(s35, 0, s36, s37, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s35 >= 0, s35 <= 1, s36 >= 0, s36 <= 1, s37 >= 0, s37 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + y3 + z' }-> if1(s38, 0, s39, s40, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s38 >= 0, s38 <= 1, s39 >= 0, s39 <= 1, s40 >= 0, s40 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s41, 0, s42, s43, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s41 >= 0, s41 <= 1, s42 >= 0, s42 <= 1, s43 >= 0, s43 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 1, s', s'', 0, 0, 0, z1) :|: s' >= 0, s' <= 1, s'' >= 0, s'' <= 1, z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 11 + x2 + y'' }-> if1(1, 0, s1, s2, 0, 0, 1 + x2 + y'' + i', z1) :|: s1 >= 0, s1 <= 1, s2 >= 0, s2 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x2 }-> if1(1, 0, s3, s4, 0, 0, 1 + x2 + y'' + i', z1) :|: s3 >= 0, s3 <= 1, s4 >= 0, s4 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y'' }-> if1(1, 0, s5, s6, 0, 0, 1 + x2 + y'' + i', z1) :|: s5 >= 0, s5 <= 1, s6 >= 0, s6 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 0, s7, s8, 0, 0, 1 + x2 + y'' + i', z1) :|: s7 >= 0, s7 <= 1, s8 >= 0, s8 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s19, s20, 1 + (z - 1), 0, 0, z1) :|: s19 >= 0, s19 <= 1, s20 >= 0, s20 <= 1, z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s9, s10, 0, 1 + (z' - 1), 0, z1) :|: s9 >= 0, s9 <= 1, s10 >= 0, s10 <= 1, z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 11 + x3 + y1 }-> if1(0, 0, s11, s12, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s11 >= 0, s11 <= 1, s12 >= 0, s12 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + x3 }-> if1(0, 0, s13, s14, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s13 >= 0, s13 <= 1, s14 >= 0, s14 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + y1 }-> if1(0, 0, s15, s16, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s15 >= 0, s15 <= 1, s16 >= 0, s16 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s17, s18, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s17 >= 0, s17 <= 1, s18 >= 0, s18 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 11 + x4 + y2 }-> if1(0, 0, s21, s22, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s21 >= 0, s21 <= 1, s22 >= 0, s22 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x4 }-> if1(0, 0, s23, s24, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s23 >= 0, s23 <= 1, s24 >= 0, s24 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y2 }-> if1(0, 0, s25, s26, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s25 >= 0, s25 <= 1, s26 >= 0, s26 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s27, s28, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s27 >= 0, s27 <= 1, s28 >= 0, s28 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {union}, {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] isEmpty: runtime: O(1) [1], size: O(1) [1] rest: runtime: O(1) [1], size: O(n^1) [z] eq: runtime: O(n^1) [3 + z'], size: O(1) [1] union: runtime: ?, size: O(n^1) [z + z'] ---------------------------------------- (55) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: union after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z ---------------------------------------- (56) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 3 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', i4, z2), reach(0, z'', union(i4, z2), 0)) :|: y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 3 }-> or(reach(z', z'', 0, z2), reach(0, z'', union(0, z2), 0)) :|: z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s29, 1, s30, s31, 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: s29 >= 0, s29 <= 1, s30 >= 0, s30 <= 1, s31 >= 0, s31 <= 1, z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 13 + x5 + y3 + z' }-> if1(s32, 0, s33, s34, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s32 >= 0, s32 <= 1, s33 >= 0, s33 <= 1, s34 >= 0, s34 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + x5 + z' }-> if1(s35, 0, s36, s37, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s35 >= 0, s35 <= 1, s36 >= 0, s36 <= 1, s37 >= 0, s37 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + y3 + z' }-> if1(s38, 0, s39, s40, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s38 >= 0, s38 <= 1, s39 >= 0, s39 <= 1, s40 >= 0, s40 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s41, 0, s42, s43, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s41 >= 0, s41 <= 1, s42 >= 0, s42 <= 1, s43 >= 0, s43 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 1, s', s'', 0, 0, 0, z1) :|: s' >= 0, s' <= 1, s'' >= 0, s'' <= 1, z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 11 + x2 + y'' }-> if1(1, 0, s1, s2, 0, 0, 1 + x2 + y'' + i', z1) :|: s1 >= 0, s1 <= 1, s2 >= 0, s2 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x2 }-> if1(1, 0, s3, s4, 0, 0, 1 + x2 + y'' + i', z1) :|: s3 >= 0, s3 <= 1, s4 >= 0, s4 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y'' }-> if1(1, 0, s5, s6, 0, 0, 1 + x2 + y'' + i', z1) :|: s5 >= 0, s5 <= 1, s6 >= 0, s6 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 0, s7, s8, 0, 0, 1 + x2 + y'' + i', z1) :|: s7 >= 0, s7 <= 1, s8 >= 0, s8 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s19, s20, 1 + (z - 1), 0, 0, z1) :|: s19 >= 0, s19 <= 1, s20 >= 0, s20 <= 1, z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s9, s10, 0, 1 + (z' - 1), 0, z1) :|: s9 >= 0, s9 <= 1, s10 >= 0, s10 <= 1, z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 11 + x3 + y1 }-> if1(0, 0, s11, s12, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s11 >= 0, s11 <= 1, s12 >= 0, s12 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + x3 }-> if1(0, 0, s13, s14, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s13 >= 0, s13 <= 1, s14 >= 0, s14 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + y1 }-> if1(0, 0, s15, s16, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s15 >= 0, s15 <= 1, s16 >= 0, s16 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s17, s18, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s17 >= 0, s17 <= 1, s18 >= 0, s18 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 11 + x4 + y2 }-> if1(0, 0, s21, s22, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s21 >= 0, s21 <= 1, s22 >= 0, s22 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x4 }-> if1(0, 0, s23, s24, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s23 >= 0, s23 <= 1, s24 >= 0, s24 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y2 }-> if1(0, 0, s25, s26, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s25 >= 0, s25 <= 1, s26 >= 0, s26 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s27, s28, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s27 >= 0, s27 <= 1, s28 >= 0, s28 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, z') :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] isEmpty: runtime: O(1) [1], size: O(1) [1] rest: runtime: O(1) [1], size: O(n^1) [z] eq: runtime: O(n^1) [3 + z'], size: O(1) [1] union: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] ---------------------------------------- (57) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (58) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 3 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 5 + i4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', s45, 0)) :|: s45 >= 0, s45 <= i4 + z2, y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 4 + i4 }-> or(reach(z', z'', i4, z2), reach(0, z'', s46, 0)) :|: s46 >= 0, s46 <= i4 + z2, y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', 0, z2), reach(0, z'', s47, 0)) :|: s47 >= 0, s47 <= 0 + z2, z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s29, 1, s30, s31, 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: s29 >= 0, s29 <= 1, s30 >= 0, s30 <= 1, s31 >= 0, s31 <= 1, z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 13 + x5 + y3 + z' }-> if1(s32, 0, s33, s34, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s32 >= 0, s32 <= 1, s33 >= 0, s33 <= 1, s34 >= 0, s34 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + x5 + z' }-> if1(s35, 0, s36, s37, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s35 >= 0, s35 <= 1, s36 >= 0, s36 <= 1, s37 >= 0, s37 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + y3 + z' }-> if1(s38, 0, s39, s40, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s38 >= 0, s38 <= 1, s39 >= 0, s39 <= 1, s40 >= 0, s40 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s41, 0, s42, s43, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s41 >= 0, s41 <= 1, s42 >= 0, s42 <= 1, s43 >= 0, s43 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 1, s', s'', 0, 0, 0, z1) :|: s' >= 0, s' <= 1, s'' >= 0, s'' <= 1, z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 11 + x2 + y'' }-> if1(1, 0, s1, s2, 0, 0, 1 + x2 + y'' + i', z1) :|: s1 >= 0, s1 <= 1, s2 >= 0, s2 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x2 }-> if1(1, 0, s3, s4, 0, 0, 1 + x2 + y'' + i', z1) :|: s3 >= 0, s3 <= 1, s4 >= 0, s4 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y'' }-> if1(1, 0, s5, s6, 0, 0, 1 + x2 + y'' + i', z1) :|: s5 >= 0, s5 <= 1, s6 >= 0, s6 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 0, s7, s8, 0, 0, 1 + x2 + y'' + i', z1) :|: s7 >= 0, s7 <= 1, s8 >= 0, s8 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s19, s20, 1 + (z - 1), 0, 0, z1) :|: s19 >= 0, s19 <= 1, s20 >= 0, s20 <= 1, z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s9, s10, 0, 1 + (z' - 1), 0, z1) :|: s9 >= 0, s9 <= 1, s10 >= 0, s10 <= 1, z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 11 + x3 + y1 }-> if1(0, 0, s11, s12, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s11 >= 0, s11 <= 1, s12 >= 0, s12 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + x3 }-> if1(0, 0, s13, s14, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s13 >= 0, s13 <= 1, s14 >= 0, s14 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + y1 }-> if1(0, 0, s15, s16, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s15 >= 0, s15 <= 1, s16 >= 0, s16 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s17, s18, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s17 >= 0, s17 <= 1, s18 >= 0, s18 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 11 + x4 + y2 }-> if1(0, 0, s21, s22, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s21 >= 0, s21 <= 1, s22 >= 0, s22 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x4 }-> if1(0, 0, s23, s24, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s23 >= 0, s23 <= 1, s24 >= 0, s24 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y2 }-> if1(0, 0, s25, s26, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s25 >= 0, s25 <= 1, s26 >= 0, s26 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s27, s28, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s27 >= 0, s27 <= 1, s28 >= 0, s28 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 2 + i }-> 1 + x + y + s44 :|: s44 >= 0, s44 <= i + z', x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] isEmpty: runtime: O(1) [1], size: O(1) [1] rest: runtime: O(1) [1], size: O(n^1) [z] eq: runtime: O(n^1) [3 + z'], size: O(1) [1] union: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] ---------------------------------------- (59) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: or after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z' ---------------------------------------- (60) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 3 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 5 + i4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', s45, 0)) :|: s45 >= 0, s45 <= i4 + z2, y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 4 + i4 }-> or(reach(z', z'', i4, z2), reach(0, z'', s46, 0)) :|: s46 >= 0, s46 <= i4 + z2, y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', 0, z2), reach(0, z'', s47, 0)) :|: s47 >= 0, s47 <= 0 + z2, z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s29, 1, s30, s31, 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: s29 >= 0, s29 <= 1, s30 >= 0, s30 <= 1, s31 >= 0, s31 <= 1, z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 13 + x5 + y3 + z' }-> if1(s32, 0, s33, s34, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s32 >= 0, s32 <= 1, s33 >= 0, s33 <= 1, s34 >= 0, s34 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + x5 + z' }-> if1(s35, 0, s36, s37, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s35 >= 0, s35 <= 1, s36 >= 0, s36 <= 1, s37 >= 0, s37 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + y3 + z' }-> if1(s38, 0, s39, s40, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s38 >= 0, s38 <= 1, s39 >= 0, s39 <= 1, s40 >= 0, s40 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s41, 0, s42, s43, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s41 >= 0, s41 <= 1, s42 >= 0, s42 <= 1, s43 >= 0, s43 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 1, s', s'', 0, 0, 0, z1) :|: s' >= 0, s' <= 1, s'' >= 0, s'' <= 1, z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 11 + x2 + y'' }-> if1(1, 0, s1, s2, 0, 0, 1 + x2 + y'' + i', z1) :|: s1 >= 0, s1 <= 1, s2 >= 0, s2 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x2 }-> if1(1, 0, s3, s4, 0, 0, 1 + x2 + y'' + i', z1) :|: s3 >= 0, s3 <= 1, s4 >= 0, s4 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y'' }-> if1(1, 0, s5, s6, 0, 0, 1 + x2 + y'' + i', z1) :|: s5 >= 0, s5 <= 1, s6 >= 0, s6 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 0, s7, s8, 0, 0, 1 + x2 + y'' + i', z1) :|: s7 >= 0, s7 <= 1, s8 >= 0, s8 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s19, s20, 1 + (z - 1), 0, 0, z1) :|: s19 >= 0, s19 <= 1, s20 >= 0, s20 <= 1, z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s9, s10, 0, 1 + (z' - 1), 0, z1) :|: s9 >= 0, s9 <= 1, s10 >= 0, s10 <= 1, z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 11 + x3 + y1 }-> if1(0, 0, s11, s12, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s11 >= 0, s11 <= 1, s12 >= 0, s12 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + x3 }-> if1(0, 0, s13, s14, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s13 >= 0, s13 <= 1, s14 >= 0, s14 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + y1 }-> if1(0, 0, s15, s16, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s15 >= 0, s15 <= 1, s16 >= 0, s16 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s17, s18, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s17 >= 0, s17 <= 1, s18 >= 0, s18 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 11 + x4 + y2 }-> if1(0, 0, s21, s22, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s21 >= 0, s21 <= 1, s22 >= 0, s22 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x4 }-> if1(0, 0, s23, s24, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s23 >= 0, s23 <= 1, s24 >= 0, s24 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y2 }-> if1(0, 0, s25, s26, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s25 >= 0, s25 <= 1, s26 >= 0, s26 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s27, s28, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s27 >= 0, s27 <= 1, s28 >= 0, s28 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 2 + i }-> 1 + x + y + s44 :|: s44 >= 0, s44 <= i + z', x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {or}, {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] isEmpty: runtime: O(1) [1], size: O(1) [1] rest: runtime: O(1) [1], size: O(n^1) [z] eq: runtime: O(n^1) [3 + z'], size: O(1) [1] union: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] or: runtime: ?, size: O(n^1) [1 + z'] ---------------------------------------- (61) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: or after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (62) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 3 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 5 + i4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', s45, 0)) :|: s45 >= 0, s45 <= i4 + z2, y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 4 + i4 }-> or(reach(z', z'', i4, z2), reach(0, z'', s46, 0)) :|: s46 >= 0, s46 <= i4 + z2, y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', 0, z2), reach(0, z'', s47, 0)) :|: s47 >= 0, s47 <= 0 + z2, z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s29, 1, s30, s31, 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: s29 >= 0, s29 <= 1, s30 >= 0, s30 <= 1, s31 >= 0, s31 <= 1, z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 13 + x5 + y3 + z' }-> if1(s32, 0, s33, s34, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s32 >= 0, s32 <= 1, s33 >= 0, s33 <= 1, s34 >= 0, s34 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + x5 + z' }-> if1(s35, 0, s36, s37, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s35 >= 0, s35 <= 1, s36 >= 0, s36 <= 1, s37 >= 0, s37 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + y3 + z' }-> if1(s38, 0, s39, s40, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s38 >= 0, s38 <= 1, s39 >= 0, s39 <= 1, s40 >= 0, s40 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s41, 0, s42, s43, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s41 >= 0, s41 <= 1, s42 >= 0, s42 <= 1, s43 >= 0, s43 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 1, s', s'', 0, 0, 0, z1) :|: s' >= 0, s' <= 1, s'' >= 0, s'' <= 1, z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 11 + x2 + y'' }-> if1(1, 0, s1, s2, 0, 0, 1 + x2 + y'' + i', z1) :|: s1 >= 0, s1 <= 1, s2 >= 0, s2 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x2 }-> if1(1, 0, s3, s4, 0, 0, 1 + x2 + y'' + i', z1) :|: s3 >= 0, s3 <= 1, s4 >= 0, s4 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y'' }-> if1(1, 0, s5, s6, 0, 0, 1 + x2 + y'' + i', z1) :|: s5 >= 0, s5 <= 1, s6 >= 0, s6 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 0, s7, s8, 0, 0, 1 + x2 + y'' + i', z1) :|: s7 >= 0, s7 <= 1, s8 >= 0, s8 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s19, s20, 1 + (z - 1), 0, 0, z1) :|: s19 >= 0, s19 <= 1, s20 >= 0, s20 <= 1, z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s9, s10, 0, 1 + (z' - 1), 0, z1) :|: s9 >= 0, s9 <= 1, s10 >= 0, s10 <= 1, z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 11 + x3 + y1 }-> if1(0, 0, s11, s12, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s11 >= 0, s11 <= 1, s12 >= 0, s12 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + x3 }-> if1(0, 0, s13, s14, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s13 >= 0, s13 <= 1, s14 >= 0, s14 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + y1 }-> if1(0, 0, s15, s16, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s15 >= 0, s15 <= 1, s16 >= 0, s16 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s17, s18, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s17 >= 0, s17 <= 1, s18 >= 0, s18 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 11 + x4 + y2 }-> if1(0, 0, s21, s22, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s21 >= 0, s21 <= 1, s22 >= 0, s22 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x4 }-> if1(0, 0, s23, s24, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s23 >= 0, s23 <= 1, s24 >= 0, s24 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y2 }-> if1(0, 0, s25, s26, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s25 >= 0, s25 <= 1, s26 >= 0, s26 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s27, s28, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s27 >= 0, s27 <= 1, s28 >= 0, s28 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 2 + i }-> 1 + x + y + s44 :|: s44 >= 0, s44 <= i + z', x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] isEmpty: runtime: O(1) [1], size: O(1) [1] rest: runtime: O(1) [1], size: O(n^1) [z] eq: runtime: O(n^1) [3 + z'], size: O(1) [1] union: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] or: runtime: O(1) [1], size: O(n^1) [1 + z'] ---------------------------------------- (63) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (64) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 3 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 5 + i4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', s45, 0)) :|: s45 >= 0, s45 <= i4 + z2, y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 4 + i4 }-> or(reach(z', z'', i4, z2), reach(0, z'', s46, 0)) :|: s46 >= 0, s46 <= i4 + z2, y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', 0, z2), reach(0, z'', s47, 0)) :|: s47 >= 0, s47 <= 0 + z2, z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s29, 1, s30, s31, 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: s29 >= 0, s29 <= 1, s30 >= 0, s30 <= 1, s31 >= 0, s31 <= 1, z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 13 + x5 + y3 + z' }-> if1(s32, 0, s33, s34, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s32 >= 0, s32 <= 1, s33 >= 0, s33 <= 1, s34 >= 0, s34 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + x5 + z' }-> if1(s35, 0, s36, s37, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s35 >= 0, s35 <= 1, s36 >= 0, s36 <= 1, s37 >= 0, s37 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + y3 + z' }-> if1(s38, 0, s39, s40, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s38 >= 0, s38 <= 1, s39 >= 0, s39 <= 1, s40 >= 0, s40 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s41, 0, s42, s43, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s41 >= 0, s41 <= 1, s42 >= 0, s42 <= 1, s43 >= 0, s43 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 1, s', s'', 0, 0, 0, z1) :|: s' >= 0, s' <= 1, s'' >= 0, s'' <= 1, z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 11 + x2 + y'' }-> if1(1, 0, s1, s2, 0, 0, 1 + x2 + y'' + i', z1) :|: s1 >= 0, s1 <= 1, s2 >= 0, s2 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x2 }-> if1(1, 0, s3, s4, 0, 0, 1 + x2 + y'' + i', z1) :|: s3 >= 0, s3 <= 1, s4 >= 0, s4 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y'' }-> if1(1, 0, s5, s6, 0, 0, 1 + x2 + y'' + i', z1) :|: s5 >= 0, s5 <= 1, s6 >= 0, s6 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 0, s7, s8, 0, 0, 1 + x2 + y'' + i', z1) :|: s7 >= 0, s7 <= 1, s8 >= 0, s8 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s19, s20, 1 + (z - 1), 0, 0, z1) :|: s19 >= 0, s19 <= 1, s20 >= 0, s20 <= 1, z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s9, s10, 0, 1 + (z' - 1), 0, z1) :|: s9 >= 0, s9 <= 1, s10 >= 0, s10 <= 1, z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 11 + x3 + y1 }-> if1(0, 0, s11, s12, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s11 >= 0, s11 <= 1, s12 >= 0, s12 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + x3 }-> if1(0, 0, s13, s14, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s13 >= 0, s13 <= 1, s14 >= 0, s14 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + y1 }-> if1(0, 0, s15, s16, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s15 >= 0, s15 <= 1, s16 >= 0, s16 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s17, s18, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s17 >= 0, s17 <= 1, s18 >= 0, s18 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 11 + x4 + y2 }-> if1(0, 0, s21, s22, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s21 >= 0, s21 <= 1, s22 >= 0, s22 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x4 }-> if1(0, 0, s23, s24, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s23 >= 0, s23 <= 1, s24 >= 0, s24 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y2 }-> if1(0, 0, s25, s26, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s25 >= 0, s25 <= 1, s26 >= 0, s26 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s27, s28, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s27 >= 0, s27 <= 1, s28 >= 0, s28 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 2 + i }-> 1 + x + y + s44 :|: s44 >= 0, s44 <= i + z', x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] isEmpty: runtime: O(1) [1], size: O(1) [1] rest: runtime: O(1) [1], size: O(n^1) [z] eq: runtime: O(n^1) [3 + z'], size: O(1) [1] union: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] or: runtime: O(1) [1], size: O(n^1) [1 + z'] ---------------------------------------- (65) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: if2 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: if4 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: reach after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: if1 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: if3 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (66) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 3 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 5 + i4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', s45, 0)) :|: s45 >= 0, s45 <= i4 + z2, y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 4 + i4 }-> or(reach(z', z'', i4, z2), reach(0, z'', s46, 0)) :|: s46 >= 0, s46 <= i4 + z2, y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', 0, z2), reach(0, z'', s47, 0)) :|: s47 >= 0, s47 <= 0 + z2, z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s29, 1, s30, s31, 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: s29 >= 0, s29 <= 1, s30 >= 0, s30 <= 1, s31 >= 0, s31 <= 1, z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 13 + x5 + y3 + z' }-> if1(s32, 0, s33, s34, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s32 >= 0, s32 <= 1, s33 >= 0, s33 <= 1, s34 >= 0, s34 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + x5 + z' }-> if1(s35, 0, s36, s37, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s35 >= 0, s35 <= 1, s36 >= 0, s36 <= 1, s37 >= 0, s37 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + y3 + z' }-> if1(s38, 0, s39, s40, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s38 >= 0, s38 <= 1, s39 >= 0, s39 <= 1, s40 >= 0, s40 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s41, 0, s42, s43, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s41 >= 0, s41 <= 1, s42 >= 0, s42 <= 1, s43 >= 0, s43 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 1, s', s'', 0, 0, 0, z1) :|: s' >= 0, s' <= 1, s'' >= 0, s'' <= 1, z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 11 + x2 + y'' }-> if1(1, 0, s1, s2, 0, 0, 1 + x2 + y'' + i', z1) :|: s1 >= 0, s1 <= 1, s2 >= 0, s2 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x2 }-> if1(1, 0, s3, s4, 0, 0, 1 + x2 + y'' + i', z1) :|: s3 >= 0, s3 <= 1, s4 >= 0, s4 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y'' }-> if1(1, 0, s5, s6, 0, 0, 1 + x2 + y'' + i', z1) :|: s5 >= 0, s5 <= 1, s6 >= 0, s6 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 0, s7, s8, 0, 0, 1 + x2 + y'' + i', z1) :|: s7 >= 0, s7 <= 1, s8 >= 0, s8 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s19, s20, 1 + (z - 1), 0, 0, z1) :|: s19 >= 0, s19 <= 1, s20 >= 0, s20 <= 1, z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s9, s10, 0, 1 + (z' - 1), 0, z1) :|: s9 >= 0, s9 <= 1, s10 >= 0, s10 <= 1, z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 11 + x3 + y1 }-> if1(0, 0, s11, s12, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s11 >= 0, s11 <= 1, s12 >= 0, s12 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + x3 }-> if1(0, 0, s13, s14, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s13 >= 0, s13 <= 1, s14 >= 0, s14 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + y1 }-> if1(0, 0, s15, s16, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s15 >= 0, s15 <= 1, s16 >= 0, s16 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s17, s18, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s17 >= 0, s17 <= 1, s18 >= 0, s18 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 11 + x4 + y2 }-> if1(0, 0, s21, s22, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s21 >= 0, s21 <= 1, s22 >= 0, s22 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x4 }-> if1(0, 0, s23, s24, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s23 >= 0, s23 <= 1, s24 >= 0, s24 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y2 }-> if1(0, 0, s25, s26, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s25 >= 0, s25 <= 1, s26 >= 0, s26 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s27, s28, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s27 >= 0, s27 <= 1, s28 >= 0, s28 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 2 + i }-> 1 + x + y + s44 :|: s44 >= 0, s44 <= i + z', x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] isEmpty: runtime: O(1) [1], size: O(1) [1] rest: runtime: O(1) [1], size: O(n^1) [z] eq: runtime: O(n^1) [3 + z'], size: O(1) [1] union: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] or: runtime: O(1) [1], size: O(n^1) [1 + z'] if2: runtime: ?, size: INF if4: runtime: ?, size: INF reach: runtime: ?, size: INF if1: runtime: ?, size: INF if3: runtime: ?, size: INF ---------------------------------------- (67) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: if2 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (68) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 3 + z' }-> s :|: s >= 0, s <= 1, z - 1 >= 0, z' - 1 >= 0 eq(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0 eq(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: z >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(z', z'', z1, z2, z3, z4, z5) :|: z' >= 0, z3 >= 0, z4 >= 0, z5 >= 0, z = 0, z1 >= 0, z'' >= 0, z2 >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 1 :|: z' >= 0, z = 1, z3 >= 0, z4 >= 0, z5 >= 0, z1 >= 0, z'' >= 0, z2 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(z', z'', z1, z2, z3, z4) :|: z2 >= 0, z3 >= 0, z4 >= 0, z = 0, z'' >= 0, z' >= 0, z1 >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 0 :|: z = 1, z2 >= 0, z3 >= 0, z4 >= 0, z'' >= 0, z' >= 0, z1 >= 0 if3(z, z', z'', z1, z2, z3) -{ 4 }-> reach(z'', z1, i3, 1 + x6 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + x6 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 3 }-> reach(z'', z1, i3, 1 + 0 + y4 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, i3, 1 + 0 + 0 + z3) :|: z1 >= 0, z3 >= 0, y4 >= 0, z = 0, z' >= 0, i3 >= 0, z2 = 1 + x6 + y4 + i3, z'' >= 0, x6 >= 0 if3(z, z', z'', z1, z2, z3) -{ 2 }-> reach(z'', z1, 0, 1 + 0 + 0 + z3) :|: z2 = 0, z'' >= 0, z1 >= 0, z3 >= 0, z = 0, z' >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(z', z'', z1, z2, z3) :|: z = 1, z'' >= 0, z1 >= 0, z2 >= 0, z3 >= 0, z' >= 0 if4(z, z', z'', z1, z2) -{ 5 + i4 }-> or(reach(z', z'', i4, z2), reach(y5, z'', s45, 0)) :|: s45 >= 0, s45 <= i4 + z2, y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 4 + i4 }-> or(reach(z', z'', i4, z2), reach(0, z'', s46, 0)) :|: s46 >= 0, s46 <= i4 + z2, y5 >= 0, x7 >= 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0, i4 >= 0, z1 = 1 + x7 + y5 + i4 if4(z, z', z'', z1, z2) -{ 4 }-> or(reach(z', z'', 0, z2), reach(0, z'', s47, 0)) :|: s47 >= 0, s47 <= 0 + z2, z1 = 0, z' >= 0, z'' >= 0, z2 >= 0, z = 0 if4(z, z', z'', z1, z2) -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 isEmpty(z) -{ 1 }-> 1 :|: z = 0 isEmpty(z) -{ 1 }-> 0 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 or(z, z') -{ 1 }-> 1 :|: z = 1, z' >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s29, 1, s30, s31, 1 + (z - 1), 1 + (z' - 1), 0, z1) :|: s29 >= 0, s29 <= 1, s30 >= 0, s30 <= 1, s31 >= 0, s31 <= 1, z'' = 0, z - 1 >= 0, z' - 1 >= 0, z1 >= 0 reach(z, z', z'', z1) -{ 13 + x5 + y3 + z' }-> if1(s32, 0, s33, s34, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s32 >= 0, s32 <= 1, s33 >= 0, s33 <= 1, s34 >= 0, s34 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + x5 + z' }-> if1(s35, 0, s36, s37, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s35 >= 0, s35 <= 1, s36 >= 0, s36 <= 1, s37 >= 0, s37 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 12 + y3 + z' }-> if1(s38, 0, s39, s40, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s38 >= 0, s38 <= 1, s39 >= 0, s39 <= 1, s40 >= 0, s40 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 11 + z' }-> if1(s41, 0, s42, s43, 1 + (z - 1), 1 + (z' - 1), 1 + x5 + y3 + i2, z1) :|: s41 >= 0, s41 <= 1, s42 >= 0, s42 <= 1, s43 >= 0, s43 <= 1, z - 1 >= 0, x5 >= 0, z'' = 1 + x5 + y3 + i2, z' - 1 >= 0, y3 >= 0, z1 >= 0, i2 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 1, s', s'', 0, 0, 0, z1) :|: s' >= 0, s' <= 1, s'' >= 0, s'' <= 1, z'' = 0, z1 >= 0, z = 0, z' = 0 reach(z, z', z'', z1) -{ 11 + x2 + y'' }-> if1(1, 0, s1, s2, 0, 0, 1 + x2 + y'' + i', z1) :|: s1 >= 0, s1 <= 1, s2 >= 0, s2 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x2 }-> if1(1, 0, s3, s4, 0, 0, 1 + x2 + y'' + i', z1) :|: s3 >= 0, s3 <= 1, s4 >= 0, s4 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y'' }-> if1(1, 0, s5, s6, 0, 0, 1 + x2 + y'' + i', z1) :|: s5 >= 0, s5 <= 1, s6 >= 0, s6 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(1, 0, s7, s8, 0, 0, 1 + x2 + y'' + i', z1) :|: s7 >= 0, s7 <= 1, s8 >= 0, s8 <= 1, z'' = 1 + x2 + y'' + i', i' >= 0, y'' >= 0, z1 >= 0, z = 0, x2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s19, s20, 1 + (z - 1), 0, 0, z1) :|: s19 >= 0, s19 <= 1, s20 >= 0, s20 <= 1, z'' = 0, z1 >= 0, z - 1 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 1, s9, s10, 0, 1 + (z' - 1), 0, z1) :|: s9 >= 0, s9 <= 1, s10 >= 0, s10 <= 1, z'' = 0, z' - 1 >= 0, z1 >= 0, z = 0 reach(z, z', z'', z1) -{ 11 + x3 + y1 }-> if1(0, 0, s11, s12, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s11 >= 0, s11 <= 1, s12 >= 0, s12 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + x3 }-> if1(0, 0, s13, s14, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s13 >= 0, s13 <= 1, s14 >= 0, s14 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 10 + y1 }-> if1(0, 0, s15, s16, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s15 >= 0, s15 <= 1, s16 >= 0, s16 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s17, s18, 0, 1 + (z' - 1), 1 + x3 + y1 + i'', z1) :|: s17 >= 0, s17 <= 1, s18 >= 0, s18 <= 1, y1 >= 0, i'' >= 0, z'' = 1 + x3 + y1 + i'', z' - 1 >= 0, z1 >= 0, z = 0, x3 >= 0 reach(z, z', z'', z1) -{ 11 + x4 + y2 }-> if1(0, 0, s21, s22, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s21 >= 0, s21 <= 1, s22 >= 0, s22 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + x4 }-> if1(0, 0, s23, s24, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s23 >= 0, s23 <= 1, s24 >= 0, s24 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 10 + y2 }-> if1(0, 0, s25, s26, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s25 >= 0, s25 <= 1, s26 >= 0, s26 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 reach(z, z', z'', z1) -{ 9 }-> if1(0, 0, s27, s28, 1 + (z - 1), 0, 1 + x4 + y2 + i1, z1) :|: s27 >= 0, s27 <= 1, s28 >= 0, s28 <= 1, x4 >= 0, i1 >= 0, z'' = 1 + x4 + y2 + i1, z1 >= 0, z - 1 >= 0, y2 >= 0, z' = 0 rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: z >= 0 union(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 union(z, z') -{ 2 + i }-> 1 + x + y + s44 :|: s44 >= 0, s44 <= i + z', x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, z' >= 0 Function symbols to be analyzed: {if2,if4,reach,if1,if3} Previous analysis results are: to: runtime: O(1) [1], size: O(n^1) [z] from: runtime: O(1) [1], size: O(n^1) [z] isEmpty: runtime: O(1) [1], size: O(1) [1] rest: runtime: O(1) [1], size: O(n^1) [z] eq: runtime: O(n^1) [3 + z'], size: O(1) [1] union: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] or: runtime: O(1) [1], size: O(n^1) [1 + z'] if2: runtime: INF, size: INF if4: runtime: ?, size: INF reach: runtime: ?, size: INF if1: runtime: ?, size: INF if3: runtime: ?, size: INF ---------------------------------------- (69) CompletionProof (UPPER BOUND(ID)) The TRS is a completely defined constructor system, as every type has a constant constructor and the following rules were added: from(v0) -> null_from [0] to(v0) -> null_to [0] eq(v0, v1) -> null_eq [0] or(v0, v1) -> null_or [0] if1(v0, v1, v2, v3, v4, v5, v6, v7) -> null_if1 [0] if2(v0, v1, v2, v3, v4, v5, v6) -> null_if2 [0] if3(v0, v1, v2, v3, v4, v5) -> null_if3 [0] if4(v0, v1, v2, v3, v4) -> null_if4 [0] And the following fresh constants: null_from, null_to, null_eq, null_or, null_if1, null_if2, null_if3, null_if4 ---------------------------------------- (70) Obligation: Runtime Complexity Weighted TRS where all functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: eq(0, 0) -> true [1] eq(0, s(x)) -> false [1] eq(s(x), 0) -> false [1] eq(s(x), s(y)) -> eq(x, y) [1] or(true, y) -> true [1] or(false, y) -> y [1] union(empty, h) -> h [1] union(edge(x, y, i), h) -> edge(x, y, union(i, h)) [1] isEmpty(empty) -> true [1] isEmpty(edge(x, y, i)) -> false [1] from(edge(x, y, i)) -> x [1] to(edge(x, y, i)) -> y [1] rest(edge(x, y, i)) -> i [1] rest(empty) -> empty [1] reach(x, y, i, h) -> if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h) [1] if1(true, b1, b2, b3, x, y, i, h) -> true [1] if1(false, b1, b2, b3, x, y, i, h) -> if2(b1, b2, b3, x, y, i, h) [1] if2(true, b2, b3, x, y, i, h) -> false [1] if2(false, b2, b3, x, y, i, h) -> if3(b2, b3, x, y, i, h) [1] if3(false, b3, x, y, i, h) -> reach(x, y, rest(i), edge(from(i), to(i), h)) [1] if3(true, b3, x, y, i, h) -> if4(b3, x, y, i, h) [1] if4(true, x, y, i, h) -> true [1] if4(false, x, y, i, h) -> or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty)) [1] from(v0) -> null_from [0] to(v0) -> null_to [0] eq(v0, v1) -> null_eq [0] or(v0, v1) -> null_or [0] if1(v0, v1, v2, v3, v4, v5, v6, v7) -> null_if1 [0] if2(v0, v1, v2, v3, v4, v5, v6) -> null_if2 [0] if3(v0, v1, v2, v3, v4, v5) -> null_if3 [0] if4(v0, v1, v2, v3, v4) -> null_if4 [0] The TRS has the following type information: eq :: 0:s:null_from:null_to -> 0:s:null_from:null_to -> true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 0 :: 0:s:null_from:null_to true :: true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 s :: 0:s:null_from:null_to -> 0:s:null_from:null_to false :: true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 or :: true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 -> true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 -> true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 union :: empty:edge -> empty:edge -> empty:edge empty :: empty:edge edge :: 0:s:null_from:null_to -> 0:s:null_from:null_to -> empty:edge -> empty:edge isEmpty :: empty:edge -> true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 from :: empty:edge -> 0:s:null_from:null_to to :: empty:edge -> 0:s:null_from:null_to rest :: empty:edge -> empty:edge reach :: 0:s:null_from:null_to -> 0:s:null_from:null_to -> empty:edge -> empty:edge -> true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 if1 :: true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 -> true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 -> true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 -> true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 -> 0:s:null_from:null_to -> 0:s:null_from:null_to -> empty:edge -> empty:edge -> true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 if2 :: true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 -> true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 -> true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 -> 0:s:null_from:null_to -> 0:s:null_from:null_to -> empty:edge -> empty:edge -> true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 if3 :: true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 -> true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 -> 0:s:null_from:null_to -> 0:s:null_from:null_to -> empty:edge -> empty:edge -> true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 if4 :: true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 -> 0:s:null_from:null_to -> 0:s:null_from:null_to -> empty:edge -> empty:edge -> true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 null_from :: 0:s:null_from:null_to null_to :: 0:s:null_from:null_to null_eq :: true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 null_or :: true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 null_if1 :: true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 null_if2 :: true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 null_if3 :: true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 null_if4 :: true:false:null_eq:null_or:null_if1:null_if2:null_if3:null_if4 Rewrite Strategy: INNERMOST ---------------------------------------- (71) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: 0 => 0 true => 2 false => 1 empty => 0 null_from => 0 null_to => 0 null_eq => 0 null_or => 0 null_if1 => 0 null_if2 => 0 null_if3 => 0 null_if4 => 0 ---------------------------------------- (72) Obligation: Complexity RNTS consisting of the following rules: eq(z, z') -{ 1 }-> eq(x, y) :|: z' = 1 + y, x >= 0, y >= 0, z = 1 + x eq(z, z') -{ 1 }-> 2 :|: z = 0, z' = 0 eq(z, z') -{ 1 }-> 1 :|: z' = 1 + x, x >= 0, z = 0 eq(z, z') -{ 1 }-> 1 :|: x >= 0, z = 1 + x, z' = 0 eq(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 from(z) -{ 1 }-> x :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 from(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> if2(b1, b2, b3, x, y, i, h) :|: z2 = x, b1 >= 0, z = 1, z1 = b3, z3 = y, y >= 0, z4 = i, z5 = h, i >= 0, h >= 0, z' = b1, z'' = b2, b3 >= 0, b2 >= 0, x >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 1 }-> 2 :|: z2 = x, b1 >= 0, z1 = b3, z3 = y, y >= 0, z4 = i, z5 = h, i >= 0, h >= 0, z' = b1, z'' = b2, b3 >= 0, z = 2, b2 >= 0, x >= 0 if1(z, z', z'', z1, z2, z3, z4, z5) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z5 = v7, v6 >= 0, z'' = v2, v1 >= 0, v5 >= 0, z = v0, z' = v1, z2 = v4, v2 >= 0, v3 >= 0, z3 = v5, v4 >= 0, v7 >= 0, z4 = v6 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if3(b2, b3, x, y, i, h) :|: z = 1, z3 = i, z4 = h, y >= 0, i >= 0, z' = b2, h >= 0, z'' = b3, z1 = x, b3 >= 0, b2 >= 0, z2 = y, x >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> 1 :|: z3 = i, z4 = h, y >= 0, i >= 0, z' = b2, h >= 0, z'' = b3, z1 = x, b3 >= 0, z = 2, b2 >= 0, z2 = y, x >= 0 if2(z, z', z'', z1, z2, z3, z4) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, v6 >= 0, z'' = v2, v1 >= 0, v5 >= 0, z = v0, z' = v1, z2 = v4, v2 >= 0, v3 >= 0, z3 = v5, v4 >= 0, z4 = v6 if3(z, z', z'', z1, z2, z3) -{ 1 }-> reach(x, y, rest(i), 1 + from(i) + to(i) + h) :|: z1 = y, z2 = i, z3 = h, z' = b3, z = 1, x >= 0, y >= 0, i >= 0, z'' = x, h >= 0, b3 >= 0 if3(z, z', z'', z1, z2, z3) -{ 1 }-> if4(b3, x, y, i, h) :|: z = 2, z1 = y, z2 = i, z3 = h, z' = b3, x >= 0, y >= 0, i >= 0, z'' = x, h >= 0, b3 >= 0 if3(z, z', z'', z1, z2, z3) -{ 0 }-> 0 :|: z1 = v3, z3 = v5, v0 >= 0, v4 >= 0, z'' = v2, v1 >= 0, v5 >= 0, z = v0, z' = v1, z2 = v4, v2 >= 0, v3 >= 0 if4(z, z', z'', z1, z2) -{ 1 }-> or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), 0)) :|: z' = x, z'' = y, z = 1, x >= 0, y >= 0, i >= 0, h >= 0, z1 = i, z2 = h if4(z, z', z'', z1, z2) -{ 1 }-> 2 :|: z = 2, z' = x, z'' = y, x >= 0, y >= 0, i >= 0, h >= 0, z1 = i, z2 = h if4(z, z', z'', z1, z2) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, v4 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, z2 = v4, v2 >= 0, v3 >= 0 isEmpty(z) -{ 1 }-> 2 :|: z = 0 isEmpty(z) -{ 1 }-> 1 :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 or(z, z') -{ 1 }-> y :|: z = 1, y >= 0, z' = y or(z, z') -{ 1 }-> 2 :|: z = 2, y >= 0, z' = y or(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 reach(z, z', z'', z1) -{ 1 }-> if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h) :|: z'' = i, x >= 0, y >= 0, i >= 0, h >= 0, z = x, z' = y, z1 = h rest(z) -{ 1 }-> i :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 rest(z) -{ 1 }-> 0 :|: z = 0 to(z) -{ 1 }-> y :|: x >= 0, y >= 0, z = 1 + x + y + i, i >= 0 to(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 union(z, z') -{ 1 }-> h :|: z' = h, h >= 0, z = 0 union(z, z') -{ 1 }-> 1 + x + y + union(i, h) :|: z' = h, x >= 0, y >= 0, z = 1 + x + y + i, i >= 0, h >= 0 Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (73) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (74) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) or(true, z0) -> true or(false, z0) -> z0 union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty reach(z0, z1, z2, z3) -> if1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3) if1(true, z0, z1, z2, z3, z4, z5, z6) -> true if1(false, z0, z1, z2, z3, z4, z5, z6) -> if2(z0, z1, z2, z3, z4, z5, z6) if2(true, z0, z1, z2, z3, z4, z5) -> false if2(false, z0, z1, z2, z3, z4, z5) -> if3(z0, z1, z2, z3, z4, z5) if3(false, z0, z1, z2, z3, z4) -> reach(z1, z2, rest(z3), edge(from(z3), to(z3), z4)) if3(true, z0, z1, z2, z3, z4) -> if4(z0, z1, z2, z3, z4) if4(true, z0, z1, z2, z3) -> true if4(false, z0, z1, z2, z3) -> or(reach(z0, z1, rest(z2), z3), reach(to(z2), z1, union(rest(z2), z3), empty)) Tuples: EQ(0, 0) -> c EQ(0, s(z0)) -> c1 EQ(s(z0), 0) -> c2 EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) OR(true, z0) -> c4 OR(false, z0) -> c5 UNION(empty, z0) -> c6 UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) ISEMPTY(empty) -> c8 ISEMPTY(edge(z0, z1, z2)) -> c9 FROM(edge(z0, z1, z2)) -> c10 TO(edge(z0, z1, z2)) -> c11 REST(edge(z0, z1, z2)) -> c12 REST(empty) -> c13 REACH(z0, z1, z2, z3) -> c14(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, z1)) REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), ISEMPTY(z2)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2)), FROM(z2)) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2)), TO(z2)) IF1(true, z0, z1, z2, z3, z4, z5, z6) -> c18 IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(true, z0, z1, z2, z3, z4, z5) -> c20 IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4)), REST(z3)) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4)), FROM(z3)) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4)), TO(z3)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF4(true, z0, z1, z2, z3) -> c26 IF4(false, z0, z1, z2, z3) -> c27(OR(reach(z0, z1, rest(z2), z3), reach(to(z2), z1, union(rest(z2), z3), empty)), REACH(z0, z1, rest(z2), z3), REST(z2)) IF4(false, z0, z1, z2, z3) -> c28(OR(reach(z0, z1, rest(z2), z3), reach(to(z2), z1, union(rest(z2), z3), empty)), REACH(to(z2), z1, union(rest(z2), z3), empty), TO(z2)) IF4(false, z0, z1, z2, z3) -> c29(OR(reach(z0, z1, rest(z2), z3), reach(to(z2), z1, union(rest(z2), z3), empty)), REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3), REST(z2)) S tuples: EQ(0, 0) -> c EQ(0, s(z0)) -> c1 EQ(s(z0), 0) -> c2 EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) OR(true, z0) -> c4 OR(false, z0) -> c5 UNION(empty, z0) -> c6 UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) ISEMPTY(empty) -> c8 ISEMPTY(edge(z0, z1, z2)) -> c9 FROM(edge(z0, z1, z2)) -> c10 TO(edge(z0, z1, z2)) -> c11 REST(edge(z0, z1, z2)) -> c12 REST(empty) -> c13 REACH(z0, z1, z2, z3) -> c14(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, z1)) REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), ISEMPTY(z2)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2)), FROM(z2)) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2)), TO(z2)) IF1(true, z0, z1, z2, z3, z4, z5, z6) -> c18 IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(true, z0, z1, z2, z3, z4, z5) -> c20 IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4)), REST(z3)) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4)), FROM(z3)) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4)), TO(z3)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF4(true, z0, z1, z2, z3) -> c26 IF4(false, z0, z1, z2, z3) -> c27(OR(reach(z0, z1, rest(z2), z3), reach(to(z2), z1, union(rest(z2), z3), empty)), REACH(z0, z1, rest(z2), z3), REST(z2)) IF4(false, z0, z1, z2, z3) -> c28(OR(reach(z0, z1, rest(z2), z3), reach(to(z2), z1, union(rest(z2), z3), empty)), REACH(to(z2), z1, union(rest(z2), z3), empty), TO(z2)) IF4(false, z0, z1, z2, z3) -> c29(OR(reach(z0, z1, rest(z2), z3), reach(to(z2), z1, union(rest(z2), z3), empty)), REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3), REST(z2)) K tuples:none Defined Rule Symbols: eq_2, or_2, union_2, isEmpty_1, from_1, to_1, rest_1, reach_4, if1_8, if2_7, if3_6, if4_5 Defined Pair Symbols: EQ_2, OR_2, UNION_2, ISEMPTY_1, FROM_1, TO_1, REST_1, REACH_4, IF1_8, IF2_7, IF3_6, IF4_5 Compound Symbols: c, c1, c2, c3_1, c4, c5, c6, c7_1, c8, c9, c10, c11, c12, c13, c14_2, c15_2, c16_3, c17_3, c18, c19_1, c20, c21_1, c22_2, c23_2, c24_2, c25_1, c26, c27_3, c28_3, c29_4 ---------------------------------------- (75) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 15 trailing nodes: FROM(edge(z0, z1, z2)) -> c10 ISEMPTY(empty) -> c8 OR(true, z0) -> c4 EQ(0, 0) -> c TO(edge(z0, z1, z2)) -> c11 IF4(true, z0, z1, z2, z3) -> c26 UNION(empty, z0) -> c6 OR(false, z0) -> c5 EQ(s(z0), 0) -> c2 EQ(0, s(z0)) -> c1 IF1(true, z0, z1, z2, z3, z4, z5, z6) -> c18 REST(empty) -> c13 IF2(true, z0, z1, z2, z3, z4, z5) -> c20 ISEMPTY(edge(z0, z1, z2)) -> c9 REST(edge(z0, z1, z2)) -> c12 ---------------------------------------- (76) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) or(true, z0) -> true or(false, z0) -> z0 union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty reach(z0, z1, z2, z3) -> if1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3) if1(true, z0, z1, z2, z3, z4, z5, z6) -> true if1(false, z0, z1, z2, z3, z4, z5, z6) -> if2(z0, z1, z2, z3, z4, z5, z6) if2(true, z0, z1, z2, z3, z4, z5) -> false if2(false, z0, z1, z2, z3, z4, z5) -> if3(z0, z1, z2, z3, z4, z5) if3(false, z0, z1, z2, z3, z4) -> reach(z1, z2, rest(z3), edge(from(z3), to(z3), z4)) if3(true, z0, z1, z2, z3, z4) -> if4(z0, z1, z2, z3, z4) if4(true, z0, z1, z2, z3) -> true if4(false, z0, z1, z2, z3) -> or(reach(z0, z1, rest(z2), z3), reach(to(z2), z1, union(rest(z2), z3), empty)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) REACH(z0, z1, z2, z3) -> c14(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, z1)) REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), ISEMPTY(z2)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2)), FROM(z2)) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2)), TO(z2)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4)), REST(z3)) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4)), FROM(z3)) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4)), TO(z3)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF4(false, z0, z1, z2, z3) -> c27(OR(reach(z0, z1, rest(z2), z3), reach(to(z2), z1, union(rest(z2), z3), empty)), REACH(z0, z1, rest(z2), z3), REST(z2)) IF4(false, z0, z1, z2, z3) -> c28(OR(reach(z0, z1, rest(z2), z3), reach(to(z2), z1, union(rest(z2), z3), empty)), REACH(to(z2), z1, union(rest(z2), z3), empty), TO(z2)) IF4(false, z0, z1, z2, z3) -> c29(OR(reach(z0, z1, rest(z2), z3), reach(to(z2), z1, union(rest(z2), z3), empty)), REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3), REST(z2)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) REACH(z0, z1, z2, z3) -> c14(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, z1)) REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), ISEMPTY(z2)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2)), FROM(z2)) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2)), TO(z2)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4)), REST(z3)) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4)), FROM(z3)) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4)), TO(z3)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF4(false, z0, z1, z2, z3) -> c27(OR(reach(z0, z1, rest(z2), z3), reach(to(z2), z1, union(rest(z2), z3), empty)), REACH(z0, z1, rest(z2), z3), REST(z2)) IF4(false, z0, z1, z2, z3) -> c28(OR(reach(z0, z1, rest(z2), z3), reach(to(z2), z1, union(rest(z2), z3), empty)), REACH(to(z2), z1, union(rest(z2), z3), empty), TO(z2)) IF4(false, z0, z1, z2, z3) -> c29(OR(reach(z0, z1, rest(z2), z3), reach(to(z2), z1, union(rest(z2), z3), empty)), REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3), REST(z2)) K tuples:none Defined Rule Symbols: eq_2, or_2, union_2, isEmpty_1, from_1, to_1, rest_1, reach_4, if1_8, if2_7, if3_6, if4_5 Defined Pair Symbols: EQ_2, UNION_2, REACH_4, IF1_8, IF2_7, IF3_6, IF4_5 Compound Symbols: c3_1, c7_1, c14_2, c15_2, c16_3, c17_3, c19_1, c21_1, c22_2, c23_2, c24_2, c25_1, c27_3, c28_3, c29_4 ---------------------------------------- (77) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 12 trailing tuple parts ---------------------------------------- (78) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) or(true, z0) -> true or(false, z0) -> z0 union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty reach(z0, z1, z2, z3) -> if1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3) if1(true, z0, z1, z2, z3, z4, z5, z6) -> true if1(false, z0, z1, z2, z3, z4, z5, z6) -> if2(z0, z1, z2, z3, z4, z5, z6) if2(true, z0, z1, z2, z3, z4, z5) -> false if2(false, z0, z1, z2, z3, z4, z5) -> if3(z0, z1, z2, z3, z4, z5) if3(false, z0, z1, z2, z3, z4) -> reach(z1, z2, rest(z3), edge(from(z3), to(z3), z4)) if3(true, z0, z1, z2, z3, z4) -> if4(z0, z1, z2, z3, z4) if4(true, z0, z1, z2, z3) -> true if4(false, z0, z1, z2, z3) -> or(reach(z0, z1, rest(z2), z3), reach(to(z2), z1, union(rest(z2), z3), empty)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) REACH(z0, z1, z2, z3) -> c14(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, z1)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) REACH(z0, z1, z2, z3) -> c14(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, z1)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) K tuples:none Defined Rule Symbols: eq_2, or_2, union_2, isEmpty_1, from_1, to_1, rest_1, reach_4, if1_8, if2_7, if3_6, if4_5 Defined Pair Symbols: EQ_2, UNION_2, REACH_4, IF1_8, IF2_7, IF3_6, IF4_5 Compound Symbols: c3_1, c7_1, c14_2, c19_1, c21_1, c25_1, c15_1, c16_2, c17_2, c22_1, c23_1, c24_1, c27_1, c28_1, c29_2 ---------------------------------------- (79) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: or(true, z0) -> true or(false, z0) -> z0 reach(z0, z1, z2, z3) -> if1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3) if1(true, z0, z1, z2, z3, z4, z5, z6) -> true if1(false, z0, z1, z2, z3, z4, z5, z6) -> if2(z0, z1, z2, z3, z4, z5, z6) if2(true, z0, z1, z2, z3, z4, z5) -> false if2(false, z0, z1, z2, z3, z4, z5) -> if3(z0, z1, z2, z3, z4, z5) if3(false, z0, z1, z2, z3, z4) -> reach(z1, z2, rest(z3), edge(from(z3), to(z3), z4)) if3(true, z0, z1, z2, z3, z4) -> if4(z0, z1, z2, z3, z4) if4(true, z0, z1, z2, z3) -> true if4(false, z0, z1, z2, z3) -> or(reach(z0, z1, rest(z2), z3), reach(to(z2), z1, union(rest(z2), z3), empty)) ---------------------------------------- (80) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) REACH(z0, z1, z2, z3) -> c14(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, z1)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) REACH(z0, z1, z2, z3) -> c14(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, z1)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) K tuples:none Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, REACH_4, IF1_8, IF2_7, IF3_6, IF4_5 Compound Symbols: c3_1, c7_1, c14_2, c19_1, c21_1, c25_1, c15_1, c16_2, c17_2, c22_1, c23_1, c24_1, c27_1, c28_1, c29_2 ---------------------------------------- (81) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(z0, z1, z2, z3) -> c14(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, z1)) by REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(0, 0, x2, x3) -> c14(IF1(true, isEmpty(x2), eq(0, from(x2)), eq(0, to(x2)), 0, 0, x2, x3), EQ(0, 0)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(0, s(z0))) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), 0)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) ---------------------------------------- (82) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(0, 0, x2, x3) -> c14(IF1(true, isEmpty(x2), eq(0, from(x2)), eq(0, to(x2)), 0, 0, x2, x3), EQ(0, 0)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(0, s(z0))) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), 0)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(0, 0, x2, x3) -> c14(IF1(true, isEmpty(x2), eq(0, from(x2)), eq(0, to(x2)), 0, 0, x2, x3), EQ(0, 0)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(0, s(z0))) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), 0)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) K tuples:none Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, REACH_4, IF4_5 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c15_1, c16_2, c17_2, c22_1, c23_1, c24_1, c27_1, c28_1, c29_2, c14_2 ---------------------------------------- (83) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, x2, x3) -> c14(IF1(true, isEmpty(x2), eq(0, from(x2)), eq(0, to(x2)), 0, 0, x2, x3), EQ(0, 0)) ---------------------------------------- (84) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(0, s(z0))) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), 0)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(0, s(z0))) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), 0)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) K tuples:none Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, REACH_4, IF4_5 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c15_1, c16_2, c17_2, c22_1, c23_1, c24_1, c27_1, c28_1, c29_2, c14_2 ---------------------------------------- (85) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (86) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) K tuples:none Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, REACH_4, IF4_5 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c15_1, c16_2, c17_2, c22_1, c23_1, c24_1, c27_1, c28_1, c29_2, c14_2, c14_1 ---------------------------------------- (87) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) We considered the (Usable) Rules: isEmpty(edge(z0, z1, z2)) -> false isEmpty(empty) -> true And the Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(EQ(x_1, x_2)) = 0 POL(IF1(x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8)) = x_2 POL(IF2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_1 POL(IF3(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(IF4(x_1, x_2, x_3, x_4, x_5)) = [1] POL(REACH(x_1, x_2, x_3, x_4)) = [1] POL(UNION(x_1, x_2)) = 0 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c16(x_1, x_2)) = x_1 + x_2 POL(c17(x_1, x_2)) = x_1 + x_2 POL(c19(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c27(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(edge(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(empty) = 0 POL(eq(x_1, x_2)) = 0 POL(false) = [1] POL(from(x_1)) = 0 POL(isEmpty(x_1)) = [1] POL(rest(x_1)) = [1] + x_1 POL(s(x_1)) = x_1 POL(to(x_1)) = 0 POL(true) = 0 POL(union(x_1, x_2)) = [1] + x_2 ---------------------------------------- (88) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, REACH_4, IF4_5 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c15_1, c16_2, c17_2, c22_1, c23_1, c24_1, c27_1, c28_1, c29_2, c14_2, c14_1 ---------------------------------------- (89) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(z0, z1, z2, z3) -> c15(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3)) by REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, 0, x2, x3) -> c15(IF1(true, isEmpty(x2), eq(0, from(x2)), eq(0, to(x2)), 0, 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) ---------------------------------------- (90) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, 0, x2, x3) -> c15(IF1(true, isEmpty(x2), eq(0, from(x2)), eq(0, to(x2)), 0, 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, 0, x2, x3) -> c15(IF1(true, isEmpty(x2), eq(0, from(x2)), eq(0, to(x2)), 0, 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, REACH_4, IF4_5 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c16_2, c17_2, c22_1, c23_1, c24_1, c27_1, c28_1, c29_2, c14_2, c14_1, c15_1 ---------------------------------------- (91) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, x2, x3) -> c15(IF1(true, isEmpty(x2), eq(0, from(x2)), eq(0, to(x2)), 0, 0, x2, x3)) ---------------------------------------- (92) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, REACH_4, IF4_5 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c16_2, c17_2, c22_1, c23_1, c24_1, c27_1, c28_1, c29_2, c14_2, c14_1, c15_1 ---------------------------------------- (93) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) We considered the (Usable) Rules: isEmpty(edge(z0, z1, z2)) -> false isEmpty(empty) -> true And the Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(EQ(x_1, x_2)) = 0 POL(IF1(x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8)) = x_2 POL(IF2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_1 POL(IF3(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(IF4(x_1, x_2, x_3, x_4, x_5)) = [1] POL(REACH(x_1, x_2, x_3, x_4)) = [1] POL(UNION(x_1, x_2)) = 0 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c16(x_1, x_2)) = x_1 + x_2 POL(c17(x_1, x_2)) = x_1 + x_2 POL(c19(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c27(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(edge(x_1, x_2, x_3)) = x_2 + x_3 POL(empty) = 0 POL(eq(x_1, x_2)) = 0 POL(false) = [1] POL(from(x_1)) = x_1 POL(isEmpty(x_1)) = [1] POL(rest(x_1)) = [1] + x_1 POL(s(x_1)) = x_1 POL(to(x_1)) = 0 POL(true) = 0 POL(union(x_1, x_2)) = [1] + x_2 ---------------------------------------- (94) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, REACH_4, IF4_5 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c16_2, c17_2, c22_1, c23_1, c24_1, c27_1, c28_1, c29_2, c14_2, c14_1, c15_1 ---------------------------------------- (95) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(z0, z1, z2, z3) -> c16(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z0, from(z2))) by REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, from(empty))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(0, 0, x2, x3) -> c16(IF1(true, isEmpty(x2), eq(0, from(x2)), eq(0, to(x2)), 0, 0, x2, x3), EQ(0, from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(0, from(x2))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) ---------------------------------------- (96) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, from(empty))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(0, 0, x2, x3) -> c16(IF1(true, isEmpty(x2), eq(0, from(x2)), eq(0, to(x2)), 0, 0, x2, x3), EQ(0, from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(0, from(x2))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, from(empty))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(0, 0, x2, x3) -> c16(IF1(true, isEmpty(x2), eq(0, from(x2)), eq(0, to(x2)), 0, 0, x2, x3), EQ(0, from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(0, from(x2))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, REACH_4, IF4_5 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c17_2, c22_1, c23_1, c24_1, c27_1, c28_1, c29_2, c14_2, c14_1, c15_1, c16_2 ---------------------------------------- (97) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, x2, x3) -> c16(IF1(true, isEmpty(x2), eq(0, from(x2)), eq(0, to(x2)), 0, 0, x2, x3), EQ(0, from(x2))) ---------------------------------------- (98) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, from(empty))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(0, from(x2))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, from(empty))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(0, from(x2))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, REACH_4, IF4_5 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c17_2, c22_1, c23_1, c24_1, c27_1, c28_1, c29_2, c14_2, c14_1, c15_1, c16_2 ---------------------------------------- (99) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (100) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, REACH_4, IF4_5 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c17_2, c22_1, c23_1, c24_1, c27_1, c28_1, c29_2, c14_2, c14_1, c15_1, c16_2, c16_1 ---------------------------------------- (101) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) We considered the (Usable) Rules: isEmpty(edge(z0, z1, z2)) -> false isEmpty(empty) -> true And the Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(EQ(x_1, x_2)) = 0 POL(IF1(x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8)) = x_2 POL(IF2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_1 POL(IF3(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(IF4(x_1, x_2, x_3, x_4, x_5)) = [1] POL(REACH(x_1, x_2, x_3, x_4)) = [1] POL(UNION(x_1, x_2)) = 0 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c16(x_1, x_2)) = x_1 + x_2 POL(c17(x_1, x_2)) = x_1 + x_2 POL(c19(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c27(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(edge(x_1, x_2, x_3)) = 0 POL(empty) = 0 POL(eq(x_1, x_2)) = 0 POL(false) = [1] POL(from(x_1)) = [1] POL(isEmpty(x_1)) = [1] POL(rest(x_1)) = [1] + x_1 POL(s(x_1)) = x_1 POL(to(x_1)) = 0 POL(true) = 0 POL(union(x_1, x_2)) = [1] + x_2 ---------------------------------------- (102) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, REACH_4, IF4_5 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c17_2, c22_1, c23_1, c24_1, c27_1, c28_1, c29_2, c14_2, c14_1, c15_1, c16_2, c16_1 ---------------------------------------- (103) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(z0, z1, z2, z3) -> c17(IF1(eq(z0, z1), isEmpty(z2), eq(z0, from(z2)), eq(z1, to(z2)), z0, z1, z2, z3), EQ(z1, to(z2))) by REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x1, to(empty))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, 0, x2, x3) -> c17(IF1(true, isEmpty(x2), eq(0, from(x2)), eq(0, to(x2)), 0, 0, x2, x3), EQ(0, to(x2))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(0, to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) ---------------------------------------- (104) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x1, to(empty))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, 0, x2, x3) -> c17(IF1(true, isEmpty(x2), eq(0, from(x2)), eq(0, to(x2)), 0, 0, x2, x3), EQ(0, to(x2))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(0, to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x1, to(empty))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, 0, x2, x3) -> c17(IF1(true, isEmpty(x2), eq(0, from(x2)), eq(0, to(x2)), 0, 0, x2, x3), EQ(0, to(x2))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(0, to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c28_1, c29_2, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2 ---------------------------------------- (105) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, x2, x3) -> c17(IF1(true, isEmpty(x2), eq(0, from(x2)), eq(0, to(x2)), 0, 0, x2, x3), EQ(0, to(x2))) ---------------------------------------- (106) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x1, to(empty))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(0, to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x1, to(empty))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(0, to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c28_1, c29_2, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2 ---------------------------------------- (107) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (108) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c28_1, c29_2, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1 ---------------------------------------- (109) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) We considered the (Usable) Rules: isEmpty(edge(z0, z1, z2)) -> false isEmpty(empty) -> true And the Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = [1] POL(EQ(x_1, x_2)) = 0 POL(IF1(x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8)) = x_2 + x_6 POL(IF2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_1 + x_5 POL(IF3(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] + x_4 POL(IF4(x_1, x_2, x_3, x_4, x_5)) = [1] + x_3 POL(REACH(x_1, x_2, x_3, x_4)) = [1] + x_2 POL(UNION(x_1, x_2)) = 0 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c16(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c17(x_1, x_2)) = x_1 + x_2 POL(c19(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c27(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(edge(x_1, x_2, x_3)) = 0 POL(empty) = 0 POL(eq(x_1, x_2)) = 0 POL(false) = [1] POL(from(x_1)) = [1] POL(isEmpty(x_1)) = [1] POL(rest(x_1)) = [1] + x_1 POL(s(x_1)) = [1] + x_1 POL(to(x_1)) = 0 POL(true) = 0 POL(union(x_1, x_2)) = [1] + x_2 ---------------------------------------- (110) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c28_1, c29_2, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1 ---------------------------------------- (111) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF4(false, z0, z1, z2, z3) -> c28(REACH(to(z2), z1, union(rest(z2), z3), empty)) by IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) ---------------------------------------- (112) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c29_2, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1 ---------------------------------------- (113) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF4(false, z0, z1, z2, z3) -> c29(REACH(to(z2), z1, union(rest(z2), z3), empty), UNION(rest(z2), z3)) by IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) ---------------------------------------- (114) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2 ---------------------------------------- (115) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) by REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, 0)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, 0)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(0, 0, edge(x2, x3, x4), x5) -> c14(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(0, x3), 0, 0, edge(x2, x3, x4), x5), EQ(0, 0)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, s(z0))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), 0)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) ---------------------------------------- (116) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, 0)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, 0)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(0, 0, edge(x2, x3, x4), x5) -> c14(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(0, x3), 0, 0, edge(x2, x3, x4), x5), EQ(0, 0)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, s(z0))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), 0)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, 0)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, 0)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(0, 0, edge(x2, x3, x4), x5) -> c14(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(0, x3), 0, 0, edge(x2, x3, x4), x5), EQ(0, 0)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, s(z0))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), 0)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2 ---------------------------------------- (117) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, edge(x2, x3, x4), x5) -> c14(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(0, x3), 0, 0, edge(x2, x3, x4), x5), EQ(0, 0)) ---------------------------------------- (118) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, 0)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, 0)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, s(z0))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), 0)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, 0)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, 0)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, s(z0))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), 0)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2 ---------------------------------------- (119) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 4 trailing tuple parts ---------------------------------------- (120) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2 ---------------------------------------- (121) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) by REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(0, x1)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(0, x1)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(0, 0, edge(x2, x3, x4), x5) -> c14(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, 0)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, s(z0))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), 0)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) ---------------------------------------- (122) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(0, x1)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(0, x1)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(0, 0, edge(x2, x3, x4), x5) -> c14(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, 0)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, s(z0))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), 0)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(0, x1)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(0, x1)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(0, 0, edge(x2, x3, x4), x5) -> c14(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, 0)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, s(z0))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), 0)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2 ---------------------------------------- (123) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, edge(x2, x3, x4), x5) -> c14(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, 0)) ---------------------------------------- (124) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(0, x1)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(0, x1)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, s(z0))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), 0)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(0, x1)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(0, x1)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, s(z0))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), 0)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2 ---------------------------------------- (125) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 4 trailing tuple parts ---------------------------------------- (126) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2 ---------------------------------------- (127) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) by REACH(0, 0, empty, x2) -> c14(IF1(true, true, eq(0, from(empty)), eq(0, to(empty)), 0, 0, empty, x2), EQ(0, 0)) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2), EQ(0, s(z0))) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2), EQ(s(z0), 0)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) ---------------------------------------- (128) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, 0, empty, x2) -> c14(IF1(true, true, eq(0, from(empty)), eq(0, to(empty)), 0, 0, empty, x2), EQ(0, 0)) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2), EQ(0, s(z0))) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2), EQ(s(z0), 0)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c14(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3), EQ(x0, x1)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2 ---------------------------------------- (129) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, empty, x2) -> c14(IF1(true, true, eq(0, from(empty)), eq(0, to(empty)), 0, 0, empty, x2), EQ(0, 0)) ---------------------------------------- (130) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2), EQ(0, s(z0))) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2), EQ(s(z0), 0)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2 ---------------------------------------- (131) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (132) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2 ---------------------------------------- (133) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(x0, x1, edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, x1)) by REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(0, 0, edge(x2, x3, x4), x5) -> c14(IF1(true, false, eq(0, from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, 0)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, s(z0))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), 0)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) ---------------------------------------- (134) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(0, 0, edge(x2, x3, x4), x5) -> c14(IF1(true, false, eq(0, from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, 0)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, s(z0))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), 0)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, 0, edge(x2, x3, x4), x5) -> c14(IF1(true, false, eq(0, from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, 0)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, s(z0))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), 0)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) K tuples: REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2 ---------------------------------------- (135) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, edge(x2, x3, x4), x5) -> c14(IF1(true, false, eq(0, from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, 0)) ---------------------------------------- (136) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, s(z0))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), 0)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, s(z0))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), 0)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) K tuples: REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2 ---------------------------------------- (137) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (138) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_2, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2 ---------------------------------------- (139) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(s(z0), s(z1), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), s(z1))) by REACH(s(x0), s(x1), edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(s(x1), z1), s(x0), s(x1), edge(z0, z1, z2), x3), EQ(s(x0), s(x1))) REACH(s(x0), s(x1), edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(s(x0), z0), eq(s(x1), to(edge(z0, z1, z2))), s(x0), s(x1), edge(z0, z1, z2), x3), EQ(s(x0), s(x1))) REACH(s(x0), s(x1), empty, x3) -> c14(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3), EQ(s(x0), s(x1))) REACH(s(x0), s(x1), edge(z0, z1, z2), x3) -> c14(IF1(eq(x0, x1), false, eq(s(x0), from(edge(z0, z1, z2))), eq(s(x1), to(edge(z0, z1, z2))), s(x0), s(x1), edge(z0, z1, z2), x3), EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(IF1(true, isEmpty(x2), eq(s(0), from(x2)), eq(s(0), to(x2)), s(0), s(0), x2, x3), EQ(s(0), s(0))) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) ---------------------------------------- (140) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(0), x2, x3) -> c14(IF1(true, isEmpty(x2), eq(s(0), from(x2)), eq(s(0), to(x2)), s(0), s(0), x2, x3), EQ(s(0), s(0))) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(x0), s(x1), empty, x3) -> c14(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3), EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(IF1(true, isEmpty(x2), eq(s(0), from(x2)), eq(s(0), to(x2)), s(0), s(0), x2, x3), EQ(s(0), s(0))) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) K tuples: REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (141) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (142) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(x0), s(x1), empty, x3) -> c14(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3), EQ(s(x0), s(x1))) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) K tuples: REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (143) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) We considered the (Usable) Rules:none And the Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(EQ(x_1, x_2)) = 0 POL(IF1(x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8)) = x_6 POL(IF2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF3(x_1, x_2, x_3, x_4, x_5, x_6)) = x_4 POL(IF4(x_1, x_2, x_3, x_4, x_5)) = x_3 POL(REACH(x_1, x_2, x_3, x_4)) = x_2 POL(UNION(x_1, x_2)) = 0 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c16(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c17(x_1, x_2)) = x_1 + x_2 POL(c19(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c27(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(edge(x_1, x_2, x_3)) = 0 POL(empty) = 0 POL(eq(x_1, x_2)) = 0 POL(false) = 0 POL(from(x_1)) = [1] POL(isEmpty(x_1)) = [1] + x_1 POL(rest(x_1)) = 0 POL(s(x_1)) = [1] POL(to(x_1)) = 0 POL(true) = 0 POL(union(x_1, x_2)) = [1] + x_2 ---------------------------------------- (144) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(x0), s(x1), empty, x3) -> c14(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3), EQ(s(x0), s(x1))) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) K tuples: REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (145) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) We considered the (Usable) Rules: isEmpty(edge(z0, z1, z2)) -> false isEmpty(empty) -> true And the Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(EQ(x_1, x_2)) = 0 POL(IF1(x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8)) = x_2 POL(IF2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_1 POL(IF3(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(IF4(x_1, x_2, x_3, x_4, x_5)) = [1] POL(REACH(x_1, x_2, x_3, x_4)) = [1] POL(UNION(x_1, x_2)) = 0 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c16(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c17(x_1, x_2)) = x_1 + x_2 POL(c19(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c27(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(edge(x_1, x_2, x_3)) = 0 POL(empty) = 0 POL(eq(x_1, x_2)) = 0 POL(false) = [1] POL(from(x_1)) = [1] POL(isEmpty(x_1)) = [1] POL(rest(x_1)) = 0 POL(s(x_1)) = 0 POL(to(x_1)) = 0 POL(true) = 0 POL(union(x_1, x_2)) = [1] + x_2 ---------------------------------------- (146) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) K tuples: REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (147) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3)) by REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, 0, edge(x2, x3, x4), x5) -> c15(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(0, x3), 0, 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) ---------------------------------------- (148) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, 0, edge(x2, x3, x4), x5) -> c15(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(0, x3), 0, 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, 0, edge(x2, x3, x4), x5) -> c15(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(0, x3), 0, 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (149) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, edge(x2, x3, x4), x5) -> c15(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(0, x3), 0, 0, edge(x2, x3, x4), x5)) ---------------------------------------- (150) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (151) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) by REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, 0, edge(x2, x3, x4), x5) -> c15(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) ---------------------------------------- (152) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, 0, edge(x2, x3, x4), x5) -> c15(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, 0, edge(x2, x3, x4), x5) -> c15(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (153) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, edge(x2, x3, x4), x5) -> c15(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5)) ---------------------------------------- (154) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (155) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) by REACH(0, 0, empty, x2) -> c15(IF1(true, true, eq(0, from(empty)), eq(0, to(empty)), 0, 0, empty, x2)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) ---------------------------------------- (156) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, 0, empty, x2) -> c15(IF1(true, true, eq(0, from(empty)), eq(0, to(empty)), 0, 0, empty, x2)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c15(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (157) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, empty, x2) -> c15(IF1(true, true, eq(0, from(empty)), eq(0, to(empty)), 0, 0, empty, x2)) ---------------------------------------- (158) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (159) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(x0, x1, edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3)) by REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, 0, edge(x2, x3, x4), x5) -> c15(IF1(true, false, eq(0, from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) ---------------------------------------- (160) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, 0, edge(x2, x3, x4), x5) -> c15(IF1(true, false, eq(0, from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, 0, edge(x2, x3, x4), x5) -> c15(IF1(true, false, eq(0, from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (161) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, edge(x2, x3, x4), x5) -> c15(IF1(true, false, eq(0, from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5)) ---------------------------------------- (162) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (163) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(s(z0), s(z1), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3)) by REACH(s(x0), s(x1), edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(s(x1), z1), s(x0), s(x1), edge(z0, z1, z2), x3)) REACH(s(x0), s(x1), edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(s(x0), z0), eq(s(x1), to(edge(z0, z1, z2))), s(x0), s(x1), edge(z0, z1, z2), x3)) REACH(s(x0), s(x1), empty, x3) -> c15(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(x0), s(x1), edge(z0, z1, z2), x3) -> c15(IF1(eq(x0, x1), false, eq(s(x0), from(edge(z0, z1, z2))), eq(s(x1), to(edge(z0, z1, z2))), s(x0), s(x1), edge(z0, z1, z2), x3)) REACH(s(0), s(0), x2, x3) -> c15(IF1(true, isEmpty(x2), eq(s(0), from(x2)), eq(s(0), to(x2)), s(0), s(0), x2, x3)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) ---------------------------------------- (164) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(0), x2, x3) -> c15(IF1(true, isEmpty(x2), eq(s(0), from(x2)), eq(s(0), to(x2)), s(0), s(0), x2, x3)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(x0), s(x1), empty, x3) -> c15(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c15(IF1(true, isEmpty(x2), eq(s(0), from(x2)), eq(s(0), to(x2)), s(0), s(0), x2, x3)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (165) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(s(0), s(0), x2, x3) -> c15(IF1(true, isEmpty(x2), eq(s(0), from(x2)), eq(s(0), to(x2)), s(0), s(0), x2, x3)) ---------------------------------------- (166) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(x0), s(x1), empty, x3) -> c15(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (167) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) We considered the (Usable) Rules: isEmpty(edge(z0, z1, z2)) -> false isEmpty(empty) -> true And the Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(EQ(x_1, x_2)) = 0 POL(IF1(x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8)) = x_2 POL(IF2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_1 POL(IF3(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(IF4(x_1, x_2, x_3, x_4, x_5)) = [1] POL(REACH(x_1, x_2, x_3, x_4)) = [1] POL(UNION(x_1, x_2)) = 0 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c16(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c17(x_1, x_2)) = x_1 + x_2 POL(c19(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c27(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(edge(x_1, x_2, x_3)) = 0 POL(empty) = 0 POL(eq(x_1, x_2)) = 0 POL(false) = [1] POL(from(x_1)) = [1] POL(isEmpty(x_1)) = [1] POL(rest(x_1)) = 0 POL(s(x_1)) = 0 POL(to(x_1)) = 0 POL(true) = 0 POL(union(x_1, x_2)) = [1] + x_2 ---------------------------------------- (168) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (169) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) by REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(0, 0, edge(x2, x3, x4), x5) -> c16(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(0, x3), 0, 0, edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) ---------------------------------------- (170) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(0, 0, edge(x2, x3, x4), x5) -> c16(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(0, x3), 0, 0, edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(0, 0, edge(x2, x3, x4), x5) -> c16(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(0, x3), 0, 0, edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (171) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, edge(x2, x3, x4), x5) -> c16(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(0, x3), 0, 0, edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) ---------------------------------------- (172) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (173) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (174) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (175) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) by REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(0, from(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(0, from(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(0, 0, edge(x2, x3, x4), x5) -> c16(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) ---------------------------------------- (176) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(0, from(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(0, from(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(0, 0, edge(x2, x3, x4), x5) -> c16(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(0, from(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(0, from(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(0, 0, edge(x2, x3, x4), x5) -> c16(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (177) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, edge(x2, x3, x4), x5) -> c16(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) ---------------------------------------- (178) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(0, from(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(0, from(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(0, from(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(0, from(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (179) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 3 trailing tuple parts ---------------------------------------- (180) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (181) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(x0, x1, edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x0, from(edge(z0, z1, z2)))) by REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(0, 0, edge(x2, x3, x4), x5) -> c16(IF1(true, false, eq(0, from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) ---------------------------------------- (182) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(0, 0, edge(x2, x3, x4), x5) -> c16(IF1(true, false, eq(0, from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(0, 0, edge(x2, x3, x4), x5) -> c16(IF1(true, false, eq(0, from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (183) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, edge(x2, x3, x4), x5) -> c16(IF1(true, false, eq(0, from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) ---------------------------------------- (184) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(0, from(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (185) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (186) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (187) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(s(z0), 0, x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3), EQ(s(z0), from(x2))) by REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) ---------------------------------------- (188) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_2, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2 ---------------------------------------- (189) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(s(z0), s(z1), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z0), from(x2))) by REACH(s(x0), s(x1), edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(s(x1), z1), s(x0), s(x1), edge(z0, z1, z2), x3), EQ(s(x0), from(edge(z0, z1, z2)))) REACH(s(x0), s(x1), edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(s(x0), z0), eq(s(x1), to(edge(z0, z1, z2))), s(x0), s(x1), edge(z0, z1, z2), x3), EQ(s(x0), from(edge(z0, z1, z2)))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3), EQ(s(x0), from(empty))) REACH(s(x0), s(x1), edge(z0, z1, z2), x3) -> c16(IF1(eq(x0, x1), false, eq(s(x0), from(edge(z0, z1, z2))), eq(s(x1), to(edge(z0, z1, z2))), s(x0), s(x1), edge(z0, z1, z2), x3), EQ(s(x0), from(edge(z0, z1, z2)))) REACH(s(0), s(0), x2, x3) -> c16(IF1(true, isEmpty(x2), eq(s(0), from(x2)), eq(s(0), to(x2)), s(0), s(0), x2, x3), EQ(s(0), from(x2))) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) ---------------------------------------- (190) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3), EQ(s(x0), from(empty))) REACH(s(0), s(0), x2, x3) -> c16(IF1(true, isEmpty(x2), eq(s(0), from(x2)), eq(s(0), to(x2)), s(0), s(0), x2, x3), EQ(s(0), from(x2))) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3), EQ(s(x0), from(empty))) REACH(s(0), s(0), x2, x3) -> c16(IF1(true, isEmpty(x2), eq(s(0), from(x2)), eq(s(0), to(x2)), s(0), s(0), x2, x3), EQ(s(0), from(x2))) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2, c16_2 ---------------------------------------- (191) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (192) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2, c16_2 ---------------------------------------- (193) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) We considered the (Usable) Rules:none And the Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(EQ(x_1, x_2)) = 0 POL(IF1(x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8)) = x_6 POL(IF2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF3(x_1, x_2, x_3, x_4, x_5, x_6)) = x_4 POL(IF4(x_1, x_2, x_3, x_4, x_5)) = x_3 POL(REACH(x_1, x_2, x_3, x_4)) = x_2 POL(UNION(x_1, x_2)) = 0 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c16(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c17(x_1, x_2)) = x_1 + x_2 POL(c19(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c27(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(edge(x_1, x_2, x_3)) = 0 POL(empty) = 0 POL(eq(x_1, x_2)) = 0 POL(false) = 0 POL(from(x_1)) = [1] POL(isEmpty(x_1)) = [1] + x_1 POL(rest(x_1)) = 0 POL(s(x_1)) = [1] + x_1 POL(to(x_1)) = 0 POL(true) = 0 POL(union(x_1, x_2)) = [1] + x_2 ---------------------------------------- (194) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2, c16_2 ---------------------------------------- (195) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) We considered the (Usable) Rules: isEmpty(edge(z0, z1, z2)) -> false isEmpty(empty) -> true And the Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(EQ(x_1, x_2)) = 0 POL(IF1(x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8)) = x_2 POL(IF2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_1 POL(IF3(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(IF4(x_1, x_2, x_3, x_4, x_5)) = [1] POL(REACH(x_1, x_2, x_3, x_4)) = [1] POL(UNION(x_1, x_2)) = 0 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c16(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c17(x_1, x_2)) = x_1 + x_2 POL(c19(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c27(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(edge(x_1, x_2, x_3)) = 0 POL(empty) = 0 POL(eq(x_1, x_2)) = 0 POL(false) = [1] POL(from(x_1)) = [1] POL(isEmpty(x_1)) = [1] POL(rest(x_1)) = 0 POL(s(x_1)) = 0 POL(to(x_1)) = 0 POL(true) = 0 POL(union(x_1, x_2)) = [1] + x_2 ---------------------------------------- (196) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2, c16_2 ---------------------------------------- (197) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) by REACH(0, 0, empty, x2) -> c16(IF1(true, true, eq(0, from(empty)), eq(0, to(empty)), 0, 0, empty, x2)) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c16(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) ---------------------------------------- (198) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, 0, empty, x2) -> c16(IF1(true, true, eq(0, from(empty)), eq(0, to(empty)), 0, 0, empty, x2)) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) K tuples: REACH(x0, x1, empty, x3) -> c16(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2, c16_2 ---------------------------------------- (199) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, empty, x2) -> c16(IF1(true, true, eq(0, from(empty)), eq(0, to(empty)), 0, 0, empty, x2)) ---------------------------------------- (200) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) K tuples: REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2, c16_2 ---------------------------------------- (201) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) by REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(0, to(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(0, to(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, 0, edge(x2, x3, x4), x5) -> c17(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(0, x3), 0, 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) ---------------------------------------- (202) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(0, to(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(0, to(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, 0, edge(x2, x3, x4), x5) -> c17(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(0, x3), 0, 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(0, to(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(0, to(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, 0, edge(x2, x3, x4), x5) -> c17(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(0, x3), 0, 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) K tuples: REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2, c16_2 ---------------------------------------- (203) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, edge(x2, x3, x4), x5) -> c17(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(0, x3), 0, 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) ---------------------------------------- (204) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(0, to(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(0, to(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(0, to(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(0, to(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) K tuples: REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2, c16_2 ---------------------------------------- (205) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 3 trailing tuple parts ---------------------------------------- (206) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2, c16_2 ---------------------------------------- (207) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) by REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, 0, edge(x2, x3, x4), x5) -> c17(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) ---------------------------------------- (208) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, 0, edge(x2, x3, x4), x5) -> c17(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, 0, edge(x2, x3, x4), x5) -> c17(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) K tuples: REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2, c16_2 ---------------------------------------- (209) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, edge(x2, x3, x4), x5) -> c17(IF1(true, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) ---------------------------------------- (210) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) K tuples: REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2, c16_2 ---------------------------------------- (211) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (212) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2, c16_2 ---------------------------------------- (213) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(x0, x1, edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x3), EQ(x1, to(edge(z0, z1, z2)))) by REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, 0, edge(x2, x3, x4), x5) -> c17(IF1(true, false, eq(0, from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) ---------------------------------------- (214) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, 0, edge(x2, x3, x4), x5) -> c17(IF1(true, false, eq(0, from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, 0, edge(x2, x3, x4), x5) -> c17(IF1(true, false, eq(0, from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) K tuples: REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2, c16_2 ---------------------------------------- (215) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, edge(x2, x3, x4), x5) -> c17(IF1(true, false, eq(0, from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), 0, 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) ---------------------------------------- (216) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(0, to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) K tuples: REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2, c16_2 ---------------------------------------- (217) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (218) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) K tuples: REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2, c16_2 ---------------------------------------- (219) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(0, s(z0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3), EQ(s(z0), to(x2))) by REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) ---------------------------------------- (220) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) K tuples: REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_2, c17_1, c28_1, c29_2, c14_2, c16_2 ---------------------------------------- (221) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(s(z0), s(z1), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(z0), from(x2)), eq(s(z1), to(x2)), s(z0), s(z1), x2, x3), EQ(s(z1), to(x2))) by REACH(s(x0), s(x1), edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(s(x1), z1), s(x0), s(x1), edge(z0, z1, z2), x3), EQ(s(x1), to(edge(z0, z1, z2)))) REACH(s(x0), s(x1), edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(s(x0), z0), eq(s(x1), to(edge(z0, z1, z2))), s(x0), s(x1), edge(z0, z1, z2), x3), EQ(s(x1), to(edge(z0, z1, z2)))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3), EQ(s(x1), to(empty))) REACH(s(x0), s(x1), edge(z0, z1, z2), x3) -> c17(IF1(eq(x0, x1), false, eq(s(x0), from(edge(z0, z1, z2))), eq(s(x1), to(edge(z0, z1, z2))), s(x0), s(x1), edge(z0, z1, z2), x3), EQ(s(x1), to(edge(z0, z1, z2)))) REACH(s(0), s(0), x2, x3) -> c17(IF1(true, isEmpty(x2), eq(s(0), from(x2)), eq(s(0), to(x2)), s(0), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) ---------------------------------------- (222) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3), EQ(s(x1), to(empty))) REACH(s(0), s(0), x2, x3) -> c17(IF1(true, isEmpty(x2), eq(s(0), from(x2)), eq(s(0), to(x2)), s(0), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3), EQ(s(x1), to(empty))) REACH(s(0), s(0), x2, x3) -> c17(IF1(true, isEmpty(x2), eq(s(0), from(x2)), eq(s(0), to(x2)), s(0), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) K tuples: REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c28_1, c29_2, c14_2, c16_2, c17_2 ---------------------------------------- (223) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (224) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) K tuples: REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c28_1, c29_2, c14_2, c16_2, c17_2 ---------------------------------------- (225) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) We considered the (Usable) Rules:none And the Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(EQ(x_1, x_2)) = 0 POL(IF1(x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8)) = x_6 POL(IF2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF3(x_1, x_2, x_3, x_4, x_5, x_6)) = x_4 POL(IF4(x_1, x_2, x_3, x_4, x_5)) = x_3 POL(REACH(x_1, x_2, x_3, x_4)) = x_2 POL(UNION(x_1, x_2)) = 0 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c16(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c17(x_1, x_2)) = x_1 + x_2 POL(c19(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c27(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(edge(x_1, x_2, x_3)) = 0 POL(empty) = 0 POL(eq(x_1, x_2)) = 0 POL(false) = 0 POL(from(x_1)) = [1] POL(isEmpty(x_1)) = [1] + x_1 POL(rest(x_1)) = 0 POL(s(x_1)) = [1] POL(to(x_1)) = 0 POL(true) = 0 POL(union(x_1, x_2)) = [1] + x_2 ---------------------------------------- (226) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) K tuples: REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c28_1, c29_2, c14_2, c16_2, c17_2 ---------------------------------------- (227) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) We considered the (Usable) Rules: isEmpty(edge(z0, z1, z2)) -> false isEmpty(empty) -> true And the Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = [1] POL(EQ(x_1, x_2)) = 0 POL(IF1(x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8)) = x_2 + x_6 POL(IF2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_1 + x_5 POL(IF3(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] + x_4 POL(IF4(x_1, x_2, x_3, x_4, x_5)) = [1] + x_3 POL(REACH(x_1, x_2, x_3, x_4)) = [1] + x_2 POL(UNION(x_1, x_2)) = 0 POL(c14(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c16(x_1, x_2)) = x_1 + x_2 POL(c17(x_1)) = x_1 POL(c17(x_1, x_2)) = x_1 + x_2 POL(c19(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c23(x_1)) = x_1 POL(c24(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c27(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(edge(x_1, x_2, x_3)) = 0 POL(empty) = 0 POL(eq(x_1, x_2)) = 0 POL(false) = [1] POL(from(x_1)) = [1] POL(isEmpty(x_1)) = [1] POL(rest(x_1)) = 0 POL(s(x_1)) = x_1 POL(to(x_1)) = 0 POL(true) = 0 POL(union(x_1, x_2)) = [1] + x_2 ---------------------------------------- (228) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) K tuples: REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c28_1, c29_2, c14_2, c16_2, c17_2 ---------------------------------------- (229) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) by REACH(0, 0, empty, x2) -> c17(IF1(true, true, eq(0, from(empty)), eq(0, to(empty)), 0, 0, empty, x2)) REACH(0, s(z0), empty, x2) -> c17(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c17(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c17(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) ---------------------------------------- (230) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(0, 0, empty, x2) -> c17(IF1(true, true, eq(0, from(empty)), eq(0, to(empty)), 0, 0, empty, x2)) REACH(0, s(z0), empty, x2) -> c17(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c17(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) K tuples: REACH(x0, x1, empty, x3) -> c17(IF1(eq(x0, x1), true, eq(x0, from(empty)), eq(x1, to(empty)), x0, x1, empty, x3)) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c28_1, c29_2, c14_2, c16_2, c17_2 ---------------------------------------- (231) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: REACH(0, 0, empty, x2) -> c17(IF1(true, true, eq(0, from(empty)), eq(0, to(empty)), 0, 0, empty, x2)) ---------------------------------------- (232) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(0, s(z0), empty, x2) -> c17(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c17(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) K tuples: REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c28_1, c29_2, c14_2, c16_2, c17_2 ---------------------------------------- (233) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty)) by IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) ---------------------------------------- (234) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(0, s(z0), empty, x2) -> c17(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c17(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) K tuples: REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c28_1, c29_2, c14_2, c16_2, c17_2 ---------------------------------------- (235) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF4(false, x0, x1, empty, x3) -> c28(REACH(to(empty), x1, union(empty, x3), empty)) by IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) ---------------------------------------- (236) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(0, s(z0), empty, x2) -> c17(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c17(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) K tuples: REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c28_1, c29_2, c14_2, c16_2, c17_2 ---------------------------------------- (237) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c28(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty)) by IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) ---------------------------------------- (238) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(0, s(z0), empty, x2) -> c17(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c17(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) K tuples: REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c29_2, c14_2, c16_2, c17_2, c28_1 ---------------------------------------- (239) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(to(edge(z0, z1, z2)), x1, union(z2, x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) by IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) ---------------------------------------- (240) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(0, s(z0), empty, x2) -> c17(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c17(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) K tuples: REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c29_2, c14_2, c16_2, c17_2, c28_1 ---------------------------------------- (241) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF4(false, x0, x1, empty, x3) -> c29(REACH(to(empty), x1, union(empty, x3), empty), UNION(rest(empty), x3)) by IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) ---------------------------------------- (242) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(0, s(z0), empty, x2) -> c17(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c17(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) K tuples: REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c29_2, c14_2, c16_2, c17_2, c28_1 ---------------------------------------- (243) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF4(false, x0, x1, edge(z0, z1, z2), x3) -> c29(REACH(z1, x1, union(rest(edge(z0, z1, z2)), x3), empty), UNION(rest(edge(z0, z1, z2)), x3)) by IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) ---------------------------------------- (244) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(0, s(z0), empty, x2) -> c17(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c17(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) K tuples: REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c14_2, c16_2, c17_2, c28_1, c29_2 ---------------------------------------- (245) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, s(z0))) by REACH(z0, s(z1), edge(z2, 0, z3), z4) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, 0, z3)), eq(z0, z2), false, z0, s(z1), edge(z2, 0, z3), z4), EQ(z0, s(z1))) ---------------------------------------- (246) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(0, s(z0), empty, x2) -> c17(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c17(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) REACH(z0, s(z1), edge(z2, 0, z3), z4) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, 0, z3)), eq(z0, z2), false, z0, s(z1), edge(z2, 0, z3), z4), EQ(z0, s(z1))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) REACH(z0, s(z1), edge(z2, 0, z3), z4) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, 0, z3)), eq(z0, z2), false, z0, s(z1), edge(z2, 0, z3), z4), EQ(z0, s(z1))) K tuples: REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c14_2, c16_2, c17_2, c28_1, c29_2 ---------------------------------------- (247) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c14(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, s(z0))) by REACH(z0, s(z1), edge(z2, s(z3), z4), z5) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, s(z3), z4)), eq(z0, z2), eq(z1, z3), z0, s(z1), edge(z2, s(z3), z4), z5), EQ(z0, s(z1))) ---------------------------------------- (248) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(0, s(z0), empty, x2) -> c17(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c17(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) REACH(z0, s(z1), edge(z2, 0, z3), z4) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, 0, z3)), eq(z0, z2), false, z0, s(z1), edge(z2, 0, z3), z4), EQ(z0, s(z1))) REACH(z0, s(z1), edge(z2, s(z3), z4), z5) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, s(z3), z4)), eq(z0, z2), eq(z1, z3), z0, s(z1), edge(z2, s(z3), z4), z5), EQ(z0, s(z1))) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) REACH(z0, s(z1), edge(z2, 0, z3), z4) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, 0, z3)), eq(z0, z2), false, z0, s(z1), edge(z2, 0, z3), z4), EQ(z0, s(z1))) REACH(z0, s(z1), edge(z2, s(z3), z4), z5) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, s(z3), z4)), eq(z0, z2), eq(z1, z3), z0, s(z1), edge(z2, s(z3), z4), z5), EQ(z0, s(z1))) K tuples: REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c14_2, c16_2, c17_2, c28_1, c29_2 ---------------------------------------- (249) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) by REACH(z0, z1, edge(z2, z3, z4), z5) -> c14(IF1(eq(z0, z1), false, eq(z0, z2), eq(z1, z3), z0, z1, edge(z2, z3, z4), z5), EQ(z0, z1)) ---------------------------------------- (250) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(0, s(z0), empty, x2) -> c17(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c17(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) REACH(z0, s(z1), edge(z2, 0, z3), z4) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, 0, z3)), eq(z0, z2), false, z0, s(z1), edge(z2, 0, z3), z4), EQ(z0, s(z1))) REACH(z0, s(z1), edge(z2, s(z3), z4), z5) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, s(z3), z4)), eq(z0, z2), eq(z1, z3), z0, s(z1), edge(z2, s(z3), z4), z5), EQ(z0, s(z1))) REACH(z0, z1, edge(z2, z3, z4), z5) -> c14(IF1(eq(z0, z1), false, eq(z0, z2), eq(z1, z3), z0, z1, edge(z2, z3, z4), z5), EQ(z0, z1)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) REACH(z0, s(z1), edge(z2, 0, z3), z4) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, 0, z3)), eq(z0, z2), false, z0, s(z1), edge(z2, 0, z3), z4), EQ(z0, s(z1))) REACH(z0, s(z1), edge(z2, s(z3), z4), z5) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, s(z3), z4)), eq(z0, z2), eq(z1, z3), z0, s(z1), edge(z2, s(z3), z4), z5), EQ(z0, s(z1))) REACH(z0, z1, edge(z2, z3, z4), z5) -> c14(IF1(eq(z0, z1), false, eq(z0, z2), eq(z1, z3), z0, z1, edge(z2, z3, z4), z5), EQ(z0, z1)) K tuples: REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c14_2, c16_2, c17_2, c28_1, c29_2 ---------------------------------------- (251) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) by REACH(z0, z1, edge(z2, z3, z4), z5) -> c14(IF1(eq(z0, z1), false, eq(z0, z2), eq(z1, z3), z0, z1, edge(z2, z3, z4), z5), EQ(z0, z1)) ---------------------------------------- (252) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(0, s(z0), empty, x2) -> c17(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c17(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) REACH(z0, s(z1), edge(z2, 0, z3), z4) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, 0, z3)), eq(z0, z2), false, z0, s(z1), edge(z2, 0, z3), z4), EQ(z0, s(z1))) REACH(z0, s(z1), edge(z2, s(z3), z4), z5) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, s(z3), z4)), eq(z0, z2), eq(z1, z3), z0, s(z1), edge(z2, s(z3), z4), z5), EQ(z0, s(z1))) REACH(z0, z1, edge(z2, z3, z4), z5) -> c14(IF1(eq(z0, z1), false, eq(z0, z2), eq(z1, z3), z0, z1, edge(z2, z3, z4), z5), EQ(z0, z1)) S tuples: EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) REACH(z0, s(z1), edge(z2, 0, z3), z4) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, 0, z3)), eq(z0, z2), false, z0, s(z1), edge(z2, 0, z3), z4), EQ(z0, s(z1))) REACH(z0, s(z1), edge(z2, s(z3), z4), z5) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, s(z3), z4)), eq(z0, z2), eq(z1, z3), z0, s(z1), edge(z2, s(z3), z4), z5), EQ(z0, s(z1))) REACH(z0, z1, edge(z2, z3, z4), z5) -> c14(IF1(eq(z0, z1), false, eq(z0, z2), eq(z1, z3), z0, z1, edge(z2, z3, z4), z5), EQ(z0, z1)) K tuples: REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: EQ_2, UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4 Compound Symbols: c3_1, c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c14_2, c16_2, c17_2, c28_1, c29_2 ---------------------------------------- (253) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace EQ(s(z0), s(z1)) -> c3(EQ(z0, z1)) by EQ(s(s(y0)), s(s(y1))) -> c3(EQ(s(y0), s(y1))) ---------------------------------------- (254) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(0, s(z0), empty, x2) -> c17(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c17(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) REACH(z0, s(z1), edge(z2, 0, z3), z4) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, 0, z3)), eq(z0, z2), false, z0, s(z1), edge(z2, 0, z3), z4), EQ(z0, s(z1))) REACH(z0, s(z1), edge(z2, s(z3), z4), z5) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, s(z3), z4)), eq(z0, z2), eq(z1, z3), z0, s(z1), edge(z2, s(z3), z4), z5), EQ(z0, s(z1))) REACH(z0, z1, edge(z2, z3, z4), z5) -> c14(IF1(eq(z0, z1), false, eq(z0, z2), eq(z1, z3), z0, z1, edge(z2, z3, z4), z5), EQ(z0, z1)) EQ(s(s(y0)), s(s(y1))) -> c3(EQ(s(y0), s(y1))) S tuples: UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) REACH(z0, s(z1), edge(z2, 0, z3), z4) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, 0, z3)), eq(z0, z2), false, z0, s(z1), edge(z2, 0, z3), z4), EQ(z0, s(z1))) REACH(z0, s(z1), edge(z2, s(z3), z4), z5) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, s(z3), z4)), eq(z0, z2), eq(z1, z3), z0, s(z1), edge(z2, s(z3), z4), z5), EQ(z0, s(z1))) REACH(z0, z1, edge(z2, z3, z4), z5) -> c14(IF1(eq(z0, z1), false, eq(z0, z2), eq(z1, z3), z0, z1, edge(z2, z3, z4), z5), EQ(z0, z1)) EQ(s(s(y0)), s(s(y1))) -> c3(EQ(s(y0), s(y1))) K tuples: REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4, EQ_2 Compound Symbols: c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c14_2, c16_2, c17_2, c28_1, c29_2, c3_1 ---------------------------------------- (255) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 3 trailing nodes: REACH(s(0), s(0), x2, x3) -> c17(EQ(s(0), to(x2))) REACH(s(0), s(0), x2, x3) -> c14(EQ(s(0), s(0))) REACH(s(0), s(0), x2, x3) -> c16(EQ(s(0), from(x2))) ---------------------------------------- (256) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(0, s(z0), empty, x2) -> c17(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c17(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) REACH(z0, s(z1), edge(z2, 0, z3), z4) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, 0, z3)), eq(z0, z2), false, z0, s(z1), edge(z2, 0, z3), z4), EQ(z0, s(z1))) REACH(z0, s(z1), edge(z2, s(z3), z4), z5) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, s(z3), z4)), eq(z0, z2), eq(z1, z3), z0, s(z1), edge(z2, s(z3), z4), z5), EQ(z0, s(z1))) REACH(z0, z1, edge(z2, z3, z4), z5) -> c14(IF1(eq(z0, z1), false, eq(z0, z2), eq(z1, z3), z0, z1, edge(z2, z3, z4), z5), EQ(z0, z1)) EQ(s(s(y0)), s(s(y1))) -> c3(EQ(s(y0), s(y1))) S tuples: UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), s(s(z0)))) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), s(0))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(0), from(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(0), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) REACH(z0, s(z1), edge(z2, 0, z3), z4) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, 0, z3)), eq(z0, z2), false, z0, s(z1), edge(z2, 0, z3), z4), EQ(z0, s(z1))) REACH(z0, s(z1), edge(z2, s(z3), z4), z5) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, s(z3), z4)), eq(z0, z2), eq(z1, z3), z0, s(z1), edge(z2, s(z3), z4), z5), EQ(z0, s(z1))) REACH(z0, z1, edge(z2, z3, z4), z5) -> c14(IF1(eq(z0, z1), false, eq(z0, z2), eq(z1, z3), z0, z1, edge(z2, z3, z4), z5), EQ(z0, z1)) EQ(s(s(y0)), s(s(y1))) -> c3(EQ(s(y0), s(y1))) K tuples: REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4, EQ_2 Compound Symbols: c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c14_2, c16_2, c17_2, c28_1, c29_2, c3_1 ---------------------------------------- (257) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 4 trailing tuple parts ---------------------------------------- (258) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) isEmpty(empty) -> true isEmpty(edge(z0, z1, z2)) -> false from(edge(z0, z1, z2)) -> z0 to(edge(z0, z1, z2)) -> z1 rest(edge(z0, z1, z2)) -> z2 rest(empty) -> empty union(empty, z0) -> z0 union(edge(z0, z1, z2), z3) -> edge(z0, z1, union(z2, z3)) Tuples: UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(0, s(z0), empty, x2) -> c14(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c14(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), empty, x2) -> c15(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c15(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(0, s(z0), empty, x2) -> c16(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c16(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(0, s(z0), empty, x2) -> c17(IF1(false, true, eq(0, from(empty)), eq(s(z0), to(empty)), 0, s(z0), empty, x2)) REACH(s(z0), 0, empty, x2) -> c17(IF1(false, true, eq(s(z0), from(empty)), eq(0, to(empty)), s(z0), 0, empty, x2)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) REACH(z0, s(z1), edge(z2, 0, z3), z4) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, 0, z3)), eq(z0, z2), false, z0, s(z1), edge(z2, 0, z3), z4), EQ(z0, s(z1))) REACH(z0, s(z1), edge(z2, s(z3), z4), z5) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, s(z3), z4)), eq(z0, z2), eq(z1, z3), z0, s(z1), edge(z2, s(z3), z4), z5), EQ(z0, s(z1))) REACH(z0, z1, edge(z2, z3, z4), z5) -> c14(IF1(eq(z0, z1), false, eq(z0, z2), eq(z1, z3), z0, z1, edge(z2, z3, z4), z5), EQ(z0, z1)) EQ(s(s(y0)), s(s(y1))) -> c3(EQ(s(y0), s(y1))) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) S tuples: UNION(edge(z0, z1, z2), z3) -> c7(UNION(z2, z3)) IF1(false, z0, z1, z2, z3, z4, z5, z6) -> c19(IF2(z0, z1, z2, z3, z4, z5, z6)) IF2(false, z0, z1, z2, z3, z4, z5) -> c21(IF3(z0, z1, z2, z3, z4, z5)) IF3(true, z0, z1, z2, z3, z4) -> c25(IF4(z0, z1, z2, z3, z4)) IF3(false, z0, z1, z2, z3, z4) -> c22(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c23(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF3(false, z0, z1, z2, z3, z4) -> c24(REACH(z1, z2, rest(z3), edge(from(z3), to(z3), z4))) IF4(false, z0, z1, z2, z3) -> c27(REACH(z0, z1, rest(z2), z3)) REACH(0, s(z0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(0, s(z0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(0, from(x2)), eq(s(z0), to(x2)), 0, s(z0), x2, x3)) REACH(s(z0), 0, x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(z0), from(x2)), eq(0, to(x2)), s(z0), 0, x2, x3)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c14(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), x1)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c14(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), x1)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c14(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, x1)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, x1, edge(0, x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c14(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c14(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), s(z1))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c14(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c14(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), s(s(z1)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c15(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5)) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c15(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c15(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5)) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c15(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5)) REACH(x0, x1, edge(z0, z1, z2), x5) -> c15(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c15(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c15(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5)) REACH(s(0), s(s(z0)), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c15(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c15(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3)) REACH(x0, 0, edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c16(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5), EQ(x0, from(edge(x2, s(z0), x4)))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(x0, from(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c16(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(x0, from(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(s(z0), from(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c16(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(s(z0), from(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c16(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x0, from(edge(z0, z1, z2)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, x1, edge(0, x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5)) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c16(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c16(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z0), from(edge(x2, x3, x4)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c16(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5)) REACH(s(x0), 0, edge(z0, z1, z2), x2) -> c16(IF1(false, isEmpty(edge(z0, z1, z2)), eq(s(x0), from(edge(z0, z1, z2))), eq(0, to(edge(z0, z1, z2))), s(x0), 0, edge(z0, z1, z2), x2), EQ(s(x0), z0)) REACH(s(x0), 0, x1, x2) -> c16(IF1(false, isEmpty(x1), eq(s(x0), from(x1)), eq(0, to(x1)), s(x0), 0, x1, x2)) REACH(s(s(z0)), s(0), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3), EQ(s(s(z0)), from(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c16(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z0)), from(x2))) REACH(x0, s(z0), edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), false, x0, s(z0), edge(x2, 0, x4), x5), EQ(s(z0), to(edge(x2, 0, x4)))) REACH(x0, s(z0), edge(x2, s(z1), x4), x5) -> c17(IF1(eq(x0, s(z0)), isEmpty(edge(x2, s(z1), x4)), eq(x0, from(edge(x2, s(z1), x4))), eq(z0, z1), x0, s(z0), edge(x2, s(z1), x4), x5), EQ(s(z0), to(edge(x2, s(z1), x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), isEmpty(edge(z0, z1, z2)), eq(x0, z0), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, from(edge(z0, z1, z2))), eq(x1, z1), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, from(edge(x2, x3, x4))), eq(s(z0), x3), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), x3), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(x0, 0, edge(x2, 0, x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, 0, x4)), eq(x0, from(edge(x2, 0, x4))), true, x0, 0, edge(x2, 0, x4), x5)) REACH(x0, 0, edge(x2, s(z0), x4), x5) -> c17(IF1(eq(x0, 0), isEmpty(edge(x2, s(z0), x4)), eq(x0, from(edge(x2, s(z0), x4))), false, x0, 0, edge(x2, s(z0), x4), x5)) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), from(edge(x2, x3, x4))), eq(0, x3), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, x1, edge(0, x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(0, x3, x4)), true, eq(x1, to(edge(0, x3, x4))), 0, x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(0, x1, edge(s(z0), x3, x4), x5) -> c17(IF1(eq(0, x1), isEmpty(edge(s(z0), x3, x4)), false, eq(x1, to(edge(s(z0), x3, x4))), 0, x1, edge(s(z0), x3, x4), x5), EQ(x1, to(edge(s(z0), x3, x4)))) REACH(s(z0), x1, edge(0, x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(0, x3, x4)), false, eq(x1, to(edge(0, x3, x4))), s(z0), x1, edge(0, x3, x4), x5), EQ(x1, to(edge(0, x3, x4)))) REACH(s(z0), x1, edge(s(z1), x3, x4), x5) -> c17(IF1(eq(s(z0), x1), isEmpty(edge(s(z1), x3, x4)), eq(z0, z1), eq(x1, to(edge(s(z1), x3, x4))), s(z0), x1, edge(s(z1), x3, x4), x5), EQ(x1, to(edge(s(z1), x3, x4)))) REACH(x0, x1, edge(z0, z1, z2), x5) -> c17(IF1(eq(x0, x1), false, eq(x0, z0), eq(x1, to(edge(z0, z1, z2))), x0, x1, edge(z0, z1, z2), x5), EQ(x1, to(edge(z0, z1, z2)))) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(0, x2), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, isEmpty(edge(x2, x3, x4)), eq(s(z0), x2), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(z0), edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(0, from(edge(x2, x3, x4))), eq(s(z0), to(edge(x2, x3, x4))), 0, s(z0), edge(x2, x3, x4), x5), EQ(s(z0), to(edge(x2, x3, x4)))) REACH(s(z0), s(z1), edge(x2, x3, x4), x5) -> c17(IF1(eq(z0, z1), false, eq(s(z0), from(edge(x2, x3, x4))), eq(s(z1), to(edge(x2, x3, x4))), s(z0), s(z1), edge(x2, x3, x4), x5), EQ(s(z1), to(edge(x2, x3, x4)))) REACH(s(z0), 0, edge(x2, x3, x4), x5) -> c17(IF1(false, false, eq(s(z0), from(edge(x2, x3, x4))), eq(0, to(edge(x2, x3, x4))), s(z0), 0, edge(x2, x3, x4), x5)) REACH(0, s(x0), edge(z0, z1, z2), x2) -> c17(IF1(false, isEmpty(edge(z0, z1, z2)), eq(0, from(edge(z0, z1, z2))), eq(s(x0), to(edge(z0, z1, z2))), 0, s(x0), edge(z0, z1, z2), x2), EQ(s(x0), z1)) REACH(0, s(x0), x1, x2) -> c17(IF1(false, isEmpty(x1), eq(0, from(x1)), eq(s(x0), to(x1)), 0, s(x0), x1, x2)) REACH(s(0), s(s(z0)), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3), EQ(s(s(z0)), to(x2))) REACH(s(s(z0)), s(s(z1)), x2, x3) -> c17(IF1(eq(z0, z1), isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(s(z1)), to(x2)), s(s(z0)), s(s(z1)), x2, x3), EQ(s(s(z1)), to(x2))) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c28(REACH(to(edge(x2, x3, empty)), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c28(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c28(REACH(z1, x1, union(z2, x5), empty)) IF4(false, x0, x1, empty, z0) -> c28(REACH(to(empty), x1, z0, empty)) IF4(false, x0, x1, edge(x2, x3, empty), z0) -> c29(REACH(to(edge(x2, x3, empty)), x1, z0, empty), UNION(rest(edge(x2, x3, empty)), z0)) IF4(false, x0, x1, edge(x2, x3, edge(z0, z1, z2)), z3) -> c29(REACH(to(edge(x2, x3, edge(z0, z1, z2))), x1, edge(z0, z1, union(z2, z3)), empty), UNION(rest(edge(x2, x3, edge(z0, z1, z2))), z3)) IF4(false, x0, x1, edge(z0, z1, z2), x5) -> c29(REACH(z1, x1, union(z2, x5), empty), UNION(rest(edge(z0, z1, z2)), x5)) IF4(false, x0, x1, empty, z0) -> c29(REACH(to(empty), x1, z0, empty), UNION(rest(empty), z0)) REACH(z0, s(z1), edge(z2, 0, z3), z4) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, 0, z3)), eq(z0, z2), false, z0, s(z1), edge(z2, 0, z3), z4), EQ(z0, s(z1))) REACH(z0, s(z1), edge(z2, s(z3), z4), z5) -> c14(IF1(eq(z0, s(z1)), isEmpty(edge(z2, s(z3), z4)), eq(z0, z2), eq(z1, z3), z0, s(z1), edge(z2, s(z3), z4), z5), EQ(z0, s(z1))) REACH(z0, z1, edge(z2, z3, z4), z5) -> c14(IF1(eq(z0, z1), false, eq(z0, z2), eq(z1, z3), z0, z1, edge(z2, z3, z4), z5), EQ(z0, z1)) EQ(s(s(y0)), s(s(y1))) -> c3(EQ(s(y0), s(y1))) REACH(s(0), s(s(z0)), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c14(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) REACH(s(0), s(s(z0)), x2, x3) -> c16(IF1(false, isEmpty(x2), eq(s(0), from(x2)), eq(s(s(z0)), to(x2)), s(0), s(s(z0)), x2, x3)) REACH(s(s(z0)), s(0), x2, x3) -> c17(IF1(false, isEmpty(x2), eq(s(s(z0)), from(x2)), eq(s(0), to(x2)), s(s(z0)), s(0), x2, x3)) K tuples: REACH(s(x0), s(x1), x2, x3) -> c14(EQ(s(x0), s(x1))) REACH(s(z0), s(z1), empty, x2) -> c14(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2), EQ(s(z0), s(z1))) REACH(s(z0), s(z1), empty, x2) -> c15(IF1(eq(z0, z1), true, eq(s(z0), from(empty)), eq(s(z1), to(empty)), s(z0), s(z1), empty, x2)) REACH(s(x0), s(x1), empty, x3) -> c16(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) REACH(s(x0), s(x1), empty, x3) -> c17(IF1(eq(x0, x1), true, eq(s(x0), from(empty)), eq(s(x1), to(empty)), s(x0), s(x1), empty, x3)) Defined Rule Symbols: eq_2, isEmpty_1, from_1, to_1, rest_1, union_2 Defined Pair Symbols: UNION_2, IF1_8, IF2_7, IF3_6, IF4_5, REACH_4, EQ_2 Compound Symbols: c7_1, c19_1, c21_1, c25_1, c22_1, c23_1, c24_1, c27_1, c14_1, c15_1, c16_1, c17_1, c14_2, c16_2, c17_2, c28_1, c29_2, c3_1