KILLED proof of input_KWnKrN11ph.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) CpxTrsToCdtProof [BOTH BOUNDS(ID, ID), 0 ms] (6) CdtProblem (7) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CpxRelTRS (9) RelTrsToDecreasingLoopProblemProof [LOWER BOUND(ID), 0 ms] (10) TRS for Loop Detection (11) RenamingProof [BOTH BOUNDS(ID, ID), 1 ms] (12) CpxRelTRS (13) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (14) typed CpxTrs (15) OrderProof [LOWER BOUND(ID), 0 ms] (16) typed CpxTrs (17) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (18) CdtProblem (19) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (20) CdtProblem (21) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (22) CdtProblem (23) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (24) CdtProblem (25) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (26) CdtProblem (27) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (28) CpxRelTRS (29) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] (30) CpxTRS (31) RelTrsToWeightedTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (32) CpxWeightedTrs (33) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (34) CpxTypedWeightedTrs (35) CompletionProof [UPPER BOUND(ID), 0 ms] (36) CpxTypedWeightedCompleteTrs (37) NarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (38) CpxTypedWeightedCompleteTrs (39) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (40) CpxRNTS (41) InliningProof [UPPER BOUND(ID), 506 ms] (42) CpxRNTS (43) SimplificationProof [BOTH BOUNDS(ID, ID), 0 ms] (44) CpxRNTS (45) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 0 ms] (46) CpxRNTS (47) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (48) CpxRNTS (49) IntTrsBoundProof [UPPER BOUND(ID), 419 ms] (50) CpxRNTS (51) IntTrsBoundProof [UPPER BOUND(ID), 38 ms] (52) CpxRNTS (53) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (54) CpxRNTS (55) IntTrsBoundProof [UPPER BOUND(ID), 129 ms] (56) CpxRNTS (57) IntTrsBoundProof [UPPER BOUND(ID), 13 ms] (58) CpxRNTS (59) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (60) CpxRNTS (61) IntTrsBoundProof [UPPER BOUND(ID), 171 ms] (62) CpxRNTS (63) IntTrsBoundProof [UPPER BOUND(ID), 42 ms] (64) CpxRNTS (65) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (66) CpxRNTS (67) IntTrsBoundProof [UPPER BOUND(ID), 332 ms] (68) CpxRNTS (69) IntTrsBoundProof [UPPER BOUND(ID), 43 ms] (70) CpxRNTS (71) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (72) CpxRNTS (73) IntTrsBoundProof [UPPER BOUND(ID), 10.8 s] (74) CpxRNTS (75) IntTrsBoundProof [UPPER BOUND(ID), 3394 ms] (76) CpxRNTS (77) CompletionProof [UPPER BOUND(ID), 0 ms] (78) CpxTypedWeightedCompleteTrs (79) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 9 ms] (80) CpxRNTS (81) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (82) CdtProblem (83) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (84) CdtProblem (85) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (86) CdtProblem (87) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (88) CdtProblem (89) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (90) CdtProblem (91) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (92) CdtProblem (93) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (94) CdtProblem (95) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (96) CdtProblem (97) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (98) CdtProblem (99) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 32 ms] (100) CdtProblem (101) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (102) CdtProblem (103) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (104) CdtProblem (105) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (106) CdtProblem (107) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (108) CdtProblem (109) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (110) CdtProblem (111) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (112) CdtProblem (113) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (114) CdtProblem (115) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 40 ms] (116) CdtProblem (117) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (118) CdtProblem (119) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 28 ms] (120) CdtProblem (121) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (122) CdtProblem (123) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (124) CdtProblem (125) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (126) CdtProblem (127) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (128) CdtProblem (129) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (130) CdtProblem (131) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (132) CdtProblem (133) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 38 ms] (134) CdtProblem (135) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 29 ms] (136) CdtProblem (137) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (138) CdtProblem (139) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (140) CdtProblem (141) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (142) CdtProblem (143) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (144) CdtProblem (145) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (146) CdtProblem (147) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (148) CdtProblem (149) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (150) CdtProblem (151) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (152) CdtProblem (153) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (154) CdtProblem (155) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (156) CdtProblem (157) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (158) CdtProblem (159) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (160) CdtProblem (161) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (162) CdtProblem (163) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (164) CdtProblem (165) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (166) CdtProblem (167) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (168) CdtProblem (169) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (170) CdtProblem (171) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (172) CdtProblem (173) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (174) CdtProblem (175) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (176) CdtProblem (177) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (178) CdtProblem (179) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (180) CdtProblem (181) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (182) CdtProblem (183) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (184) CdtProblem (185) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (186) CdtProblem (187) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 31 ms] (188) CdtProblem (189) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (190) CdtProblem (191) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (192) CdtProblem (193) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (194) CdtProblem (195) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (196) CdtProblem (197) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (198) CdtProblem (199) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (200) CdtProblem (201) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (202) CdtProblem (203) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (204) CdtProblem (205) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (206) CdtProblem (207) RelTrsToWeightedTrsProof [UPPER BOUND(ID), 0 ms] (208) CpxWeightedTrs (209) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (210) CpxTypedWeightedTrs (211) CompletionProof [UPPER BOUND(ID), 0 ms] (212) CpxTypedWeightedCompleteTrs (213) NarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (214) CpxTypedWeightedCompleteTrs (215) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (216) CpxRNTS (217) InliningProof [UPPER BOUND(ID), 429 ms] (218) CpxRNTS (219) SimplificationProof [BOTH BOUNDS(ID, ID), 15 ms] (220) CpxRNTS (221) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 0 ms] (222) CpxRNTS (223) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (224) CpxRNTS (225) IntTrsBoundProof [UPPER BOUND(ID), 523 ms] (226) CpxRNTS (227) IntTrsBoundProof [UPPER BOUND(ID), 44 ms] (228) CpxRNTS (229) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (230) CpxRNTS (231) IntTrsBoundProof [UPPER BOUND(ID), 101 ms] (232) CpxRNTS (233) IntTrsBoundProof [UPPER BOUND(ID), 52 ms] (234) CpxRNTS (235) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (236) CpxRNTS (237) IntTrsBoundProof [UPPER BOUND(ID), 184 ms] (238) CpxRNTS (239) IntTrsBoundProof [UPPER BOUND(ID), 53 ms] (240) CpxRNTS (241) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (242) CpxRNTS (243) IntTrsBoundProof [UPPER BOUND(ID), 285 ms] (244) CpxRNTS (245) IntTrsBoundProof [UPPER BOUND(ID), 25 ms] (246) CpxRNTS (247) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (248) CpxRNTS (249) IntTrsBoundProof [UPPER BOUND(ID), 201 ms] (250) CpxRNTS (251) IntTrsBoundProof [UPPER BOUND(ID), 64 ms] (252) CpxRNTS (253) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (254) CpxRNTS (255) IntTrsBoundProof [UPPER BOUND(ID), 131 ms] (256) CpxRNTS (257) IntTrsBoundProof [UPPER BOUND(ID), 33 ms] (258) CpxRNTS (259) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (260) CpxRNTS (261) IntTrsBoundProof [UPPER BOUND(ID), 635 ms] (262) CpxRNTS (263) IntTrsBoundProof [UPPER BOUND(ID), 252 ms] (264) CpxRNTS (265) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (266) CpxRNTS (267) IntTrsBoundProof [UPPER BOUND(ID), 2117 ms] (268) CpxRNTS (269) IntTrsBoundProof [UPPER BOUND(ID), 435 ms] (270) CpxRNTS (271) CompletionProof [UPPER BOUND(ID), 0 ms] (272) CpxTypedWeightedCompleteTrs (273) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (274) CpxRNTS ---------------------------------------- (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: breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue(@breadth@1, @breadth@2)) breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') breadth#2(::(@z, @_@9), @queue') -> breadth#3(breadth#4(@z), @queue') breadth#2(nil, @queue') -> nil breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues(@ys, @queue'))) breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) children#1(nil, @b, @l2) -> children#2(@l2, @b) children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil, @ys), nil) children#2(nil, @b) -> nil children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil, @xs), ::(tuple#4(@x, @y, @xs, @ys), nil)) children#3(nil, @b, @x, @xs) -> nil copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) copyover#2(nil, @outq) -> tuple#2(nil, @outq) dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil)) dequeue#2(nil, @inq) -> dequeue#3(@inq) dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) empty(@x) -> tuple#2(nil, nil) enqueue(@x, @queue) -> enqueue#1(@queue, @x) enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) enqueues(@l, @queue) -> enqueues#1(@l, @queue) enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) enqueues#1(nil, @queue) -> @queue startBreadth(@xs) -> startBreadth#1(@xs) startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) 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: breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue(@breadth@1, @breadth@2)) breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') breadth#2(::(@z, @_@9), @queue') -> breadth#3(breadth#4(@z), @queue') breadth#2(nil, @queue') -> nil breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues(@ys, @queue'))) breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) children#1(nil, @b, @l2) -> children#2(@l2, @b) children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil, @ys), nil) children#2(nil, @b) -> nil children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil, @xs), ::(tuple#4(@x, @y, @xs, @ys), nil)) children#3(nil, @b, @x, @xs) -> nil copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) copyover#2(nil, @outq) -> tuple#2(nil, @outq) dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil)) dequeue#2(nil, @inq) -> dequeue#3(@inq) dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) empty(@x) -> tuple#2(nil, nil) enqueue(@x, @queue) -> enqueue#1(@queue, @x) enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) enqueues(@l, @queue) -> enqueues#1(@l, @queue) enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) enqueues#1(nil, @queue) -> @queue startBreadth(@xs) -> startBreadth#1(@xs) startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) 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: breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue(@breadth@1, @breadth@2)) breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') breadth#2(::(@z, @_@9), @queue') -> breadth#3(breadth#4(@z), @queue') breadth#2(nil, @queue') -> nil breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues(@ys, @queue'))) breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) children#1(nil, @b, @l2) -> children#2(@l2, @b) children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil, @ys), nil) children#2(nil, @b) -> nil children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil, @xs), ::(tuple#4(@x, @y, @xs, @ys), nil)) children#3(nil, @b, @x, @xs) -> nil copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) copyover#2(nil, @outq) -> tuple#2(nil, @outq) dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil)) dequeue#2(nil, @inq) -> dequeue#3(@inq) dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) empty(@x) -> tuple#2(nil, nil) enqueue(@x, @queue) -> enqueue#1(@queue, @x) enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) enqueues(@l, @queue) -> enqueues#1(@l, @queue) enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) enqueues#1(nil, @queue) -> @queue startBreadth(@xs) -> startBreadth#1(@xs) startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (5) CpxTrsToCdtProof (BOTH BOUNDS(ID, ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (6) Obligation: Complexity Dependency Tuples Problem Rules: breadth(z0, z1) -> breadth#1(dequeue(z0, z1)) breadth#1(tuple#2(z0, z1)) -> breadth#2(z1, z0) breadth#2(::(z0, z1), z2) -> breadth#3(breadth#4(z0), z2) breadth#2(nil, z0) -> nil breadth#3(tuple#2(z0, z1), z2) -> ::(z0, breadth#5(enqueues(z1, z2))) breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) breadth#5(tuple#2(z0, z1)) -> breadth(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) empty(z0) -> tuple#2(nil, nil) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 startBreadth(z0) -> startBreadth#1(z0) startBreadth#1(::(z0, z1)) -> startBreadth#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(z0, z1)) -> breadth(z0, z1) Tuples: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2), BREADTH#4(z0)) BREADTH#2(nil, z0) -> c3 BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#4(tuple#4(z0, z1, z2, z3)) -> c5(CHILDREN(z0, z1, z2, z3)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) CHILDREN(z0, z1, z2, z3) -> c7(CHILDREN#1(z2, z1, z3)) CHILDREN#1(::(z0, z1), z2, z3) -> c8(CHILDREN#3(z3, z2, z0, z1)) CHILDREN#1(nil, z0, z1) -> c9(CHILDREN#2(z1, z0)) CHILDREN#2(::(z0, z1), z2) -> c10 CHILDREN#2(nil, z0) -> c11 CHILDREN#3(::(z0, z1), z2, z3, z4) -> c12 CHILDREN#3(nil, z0, z1, z2) -> c13 COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) COPYOVER#2(nil, z0) -> c17 DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(::(z0, z1), z2) -> c20 DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(nil) -> c23 DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) EMPTY(z0) -> c25 ENQUEUE(z0, z1) -> c26(ENQUEUE#1(z1, z0)) ENQUEUE#1(tuple#2(z0, z1), z2) -> c27 ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2)), ENQUEUE(z0, z2)) ENQUEUES#1(nil, z0) -> c30 STARTBREADTH(z0) -> c31(STARTBREADTH#1(z0)) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))), ENQUEUE(tuple#4(z0, z0, z1, z1), empty(#unit)), EMPTY(#unit)) STARTBREADTH#1(nil) -> c33 STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) S tuples: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2), BREADTH#4(z0)) BREADTH#2(nil, z0) -> c3 BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#4(tuple#4(z0, z1, z2, z3)) -> c5(CHILDREN(z0, z1, z2, z3)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) CHILDREN(z0, z1, z2, z3) -> c7(CHILDREN#1(z2, z1, z3)) CHILDREN#1(::(z0, z1), z2, z3) -> c8(CHILDREN#3(z3, z2, z0, z1)) CHILDREN#1(nil, z0, z1) -> c9(CHILDREN#2(z1, z0)) CHILDREN#2(::(z0, z1), z2) -> c10 CHILDREN#2(nil, z0) -> c11 CHILDREN#3(::(z0, z1), z2, z3, z4) -> c12 CHILDREN#3(nil, z0, z1, z2) -> c13 COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) COPYOVER#2(nil, z0) -> c17 DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(::(z0, z1), z2) -> c20 DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(nil) -> c23 DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) EMPTY(z0) -> c25 ENQUEUE(z0, z1) -> c26(ENQUEUE#1(z1, z0)) ENQUEUE#1(tuple#2(z0, z1), z2) -> c27 ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2)), ENQUEUE(z0, z2)) ENQUEUES#1(nil, z0) -> c30 STARTBREADTH(z0) -> c31(STARTBREADTH#1(z0)) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))), ENQUEUE(tuple#4(z0, z0, z1, z1), empty(#unit)), EMPTY(#unit)) STARTBREADTH#1(nil) -> c33 STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) K tuples:none Defined Rule Symbols: breadth_2, breadth#1_1, breadth#2_2, breadth#3_2, breadth#4_1, breadth#5_1, children_4, children#1_3, children#2_2, children#3_4, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, empty_1, enqueue_2, enqueue#1_2, enqueues_2, enqueues#1_2, startBreadth_1, startBreadth#1_1, startBreadth#2_1 Defined Pair Symbols: BREADTH_2, BREADTH#1_1, BREADTH#2_2, BREADTH#3_2, BREADTH#4_1, BREADTH#5_1, CHILDREN_4, CHILDREN#1_3, CHILDREN#2_2, CHILDREN#3_4, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#3_1, DEQUEUE#4_1, EMPTY_1, ENQUEUE_2, ENQUEUE#1_2, ENQUEUES_2, ENQUEUES#1_2, STARTBREADTH_1, STARTBREADTH#1_1, STARTBREADTH#2_1 Compound Symbols: c_2, c1_1, c2_2, c3, c4_2, c5_1, c6_1, c7_1, c8_1, c9_1, c10, c11, c12, c13, c14_1, c15_1, c16_1, c17, c18_1, c19_1, c20, c21_1, c22_2, c23, c24_1, c25, c26_1, c27, c28_1, c29_2, c30, c31_1, c32_3, c33, c34_1 ---------------------------------------- (7) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (8) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2), BREADTH#4(z0)) BREADTH#2(nil, z0) -> c3 BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#4(tuple#4(z0, z1, z2, z3)) -> c5(CHILDREN(z0, z1, z2, z3)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) CHILDREN(z0, z1, z2, z3) -> c7(CHILDREN#1(z2, z1, z3)) CHILDREN#1(::(z0, z1), z2, z3) -> c8(CHILDREN#3(z3, z2, z0, z1)) CHILDREN#1(nil, z0, z1) -> c9(CHILDREN#2(z1, z0)) CHILDREN#2(::(z0, z1), z2) -> c10 CHILDREN#2(nil, z0) -> c11 CHILDREN#3(::(z0, z1), z2, z3, z4) -> c12 CHILDREN#3(nil, z0, z1, z2) -> c13 COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) COPYOVER#2(nil, z0) -> c17 DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(::(z0, z1), z2) -> c20 DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(nil) -> c23 DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) EMPTY(z0) -> c25 ENQUEUE(z0, z1) -> c26(ENQUEUE#1(z1, z0)) ENQUEUE#1(tuple#2(z0, z1), z2) -> c27 ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2)), ENQUEUE(z0, z2)) ENQUEUES#1(nil, z0) -> c30 STARTBREADTH(z0) -> c31(STARTBREADTH#1(z0)) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))), ENQUEUE(tuple#4(z0, z0, z1, z1), empty(#unit)), EMPTY(#unit)) STARTBREADTH#1(nil) -> c33 STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) The (relative) TRS S consists of the following rules: breadth(z0, z1) -> breadth#1(dequeue(z0, z1)) breadth#1(tuple#2(z0, z1)) -> breadth#2(z1, z0) breadth#2(::(z0, z1), z2) -> breadth#3(breadth#4(z0), z2) breadth#2(nil, z0) -> nil breadth#3(tuple#2(z0, z1), z2) -> ::(z0, breadth#5(enqueues(z1, z2))) breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) breadth#5(tuple#2(z0, z1)) -> breadth(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) empty(z0) -> tuple#2(nil, nil) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 startBreadth(z0) -> startBreadth#1(z0) startBreadth#1(::(z0, z1)) -> startBreadth#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(z0, z1)) -> breadth(z0, z1) Rewrite Strategy: INNERMOST ---------------------------------------- (9) RelTrsToDecreasingLoopProblemProof (LOWER BOUND(ID)) Transformed a relative TRS into a decreasing-loop problem. ---------------------------------------- (10) Obligation: Analyzing the following TRS for decreasing loops: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2), BREADTH#4(z0)) BREADTH#2(nil, z0) -> c3 BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#4(tuple#4(z0, z1, z2, z3)) -> c5(CHILDREN(z0, z1, z2, z3)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) CHILDREN(z0, z1, z2, z3) -> c7(CHILDREN#1(z2, z1, z3)) CHILDREN#1(::(z0, z1), z2, z3) -> c8(CHILDREN#3(z3, z2, z0, z1)) CHILDREN#1(nil, z0, z1) -> c9(CHILDREN#2(z1, z0)) CHILDREN#2(::(z0, z1), z2) -> c10 CHILDREN#2(nil, z0) -> c11 CHILDREN#3(::(z0, z1), z2, z3, z4) -> c12 CHILDREN#3(nil, z0, z1, z2) -> c13 COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) COPYOVER#2(nil, z0) -> c17 DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(::(z0, z1), z2) -> c20 DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(nil) -> c23 DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) EMPTY(z0) -> c25 ENQUEUE(z0, z1) -> c26(ENQUEUE#1(z1, z0)) ENQUEUE#1(tuple#2(z0, z1), z2) -> c27 ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2)), ENQUEUE(z0, z2)) ENQUEUES#1(nil, z0) -> c30 STARTBREADTH(z0) -> c31(STARTBREADTH#1(z0)) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))), ENQUEUE(tuple#4(z0, z0, z1, z1), empty(#unit)), EMPTY(#unit)) STARTBREADTH#1(nil) -> c33 STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) The (relative) TRS S consists of the following rules: breadth(z0, z1) -> breadth#1(dequeue(z0, z1)) breadth#1(tuple#2(z0, z1)) -> breadth#2(z1, z0) breadth#2(::(z0, z1), z2) -> breadth#3(breadth#4(z0), z2) breadth#2(nil, z0) -> nil breadth#3(tuple#2(z0, z1), z2) -> ::(z0, breadth#5(enqueues(z1, z2))) breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) breadth#5(tuple#2(z0, z1)) -> breadth(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) empty(z0) -> tuple#2(nil, nil) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 startBreadth(z0) -> startBreadth#1(z0) startBreadth#1(::(z0, z1)) -> startBreadth#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(z0, z1)) -> breadth(z0, z1) Rewrite Strategy: INNERMOST ---------------------------------------- (11) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (12) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2), BREADTH#4(z0)) BREADTH#2(nil, z0) -> c3 BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#4(tuple#4(z0, z1, z2, z3)) -> c5(CHILDREN(z0, z1, z2, z3)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) CHILDREN(z0, z1, z2, z3) -> c7(CHILDREN#1(z2, z1, z3)) CHILDREN#1(::(z0, z1), z2, z3) -> c8(CHILDREN#3(z3, z2, z0, z1)) CHILDREN#1(nil, z0, z1) -> c9(CHILDREN#2(z1, z0)) CHILDREN#2(::(z0, z1), z2) -> c10 CHILDREN#2(nil, z0) -> c11 CHILDREN#3(::(z0, z1), z2, z3, z4) -> c12 CHILDREN#3(nil, z0, z1, z2) -> c13 COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) COPYOVER#2(nil, z0) -> c17 DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(::(z0, z1), z2) -> c20 DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(nil) -> c23 DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) EMPTY(z0) -> c25 ENQUEUE(z0, z1) -> c26(ENQUEUE#1(z1, z0)) ENQUEUE#1(tuple#2(z0, z1), z2) -> c27 ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2)), ENQUEUE(z0, z2)) ENQUEUES#1(nil, z0) -> c30 STARTBREADTH(z0) -> c31(STARTBREADTH#1(z0)) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))), ENQUEUE(tuple#4(z0, z0, z1, z1), empty(#unit)), EMPTY(#unit)) STARTBREADTH#1(nil) -> c33 STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) The (relative) TRS S consists of the following rules: breadth(z0, z1) -> breadth#1(dequeue(z0, z1)) breadth#1(tuple#2(z0, z1)) -> breadth#2(z1, z0) breadth#2(::(z0, z1), z2) -> breadth#3(breadth#4(z0), z2) breadth#2(nil, z0) -> nil breadth#3(tuple#2(z0, z1), z2) -> ::(z0, breadth#5(enqueues(z1, z2))) breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) breadth#5(tuple#2(z0, z1)) -> breadth(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) empty(z0) -> tuple#2(nil, nil) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 startBreadth(z0) -> startBreadth#1(z0) startBreadth#1(::(z0, z1)) -> startBreadth#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(z0, z1)) -> breadth(z0, z1) Rewrite Strategy: INNERMOST ---------------------------------------- (13) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (14) Obligation: Innermost TRS: Rules: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2), BREADTH#4(z0)) BREADTH#2(nil, z0) -> c3 BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#4(tuple#4(z0, z1, z2, z3)) -> c5(CHILDREN(z0, z1, z2, z3)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) CHILDREN(z0, z1, z2, z3) -> c7(CHILDREN#1(z2, z1, z3)) CHILDREN#1(::(z0, z1), z2, z3) -> c8(CHILDREN#3(z3, z2, z0, z1)) CHILDREN#1(nil, z0, z1) -> c9(CHILDREN#2(z1, z0)) CHILDREN#2(::(z0, z1), z2) -> c10 CHILDREN#2(nil, z0) -> c11 CHILDREN#3(::(z0, z1), z2, z3, z4) -> c12 CHILDREN#3(nil, z0, z1, z2) -> c13 COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) COPYOVER#2(nil, z0) -> c17 DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(::(z0, z1), z2) -> c20 DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(nil) -> c23 DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) EMPTY(z0) -> c25 ENQUEUE(z0, z1) -> c26(ENQUEUE#1(z1, z0)) ENQUEUE#1(tuple#2(z0, z1), z2) -> c27 ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2)), ENQUEUE(z0, z2)) ENQUEUES#1(nil, z0) -> c30 STARTBREADTH(z0) -> c31(STARTBREADTH#1(z0)) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))), ENQUEUE(tuple#4(z0, z0, z1, z1), empty(#unit)), EMPTY(#unit)) STARTBREADTH#1(nil) -> c33 STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) breadth(z0, z1) -> breadth#1(dequeue(z0, z1)) breadth#1(tuple#2(z0, z1)) -> breadth#2(z1, z0) breadth#2(::(z0, z1), z2) -> breadth#3(breadth#4(z0), z2) breadth#2(nil, z0) -> nil breadth#3(tuple#2(z0, z1), z2) -> ::(z0, breadth#5(enqueues(z1, z2))) breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) breadth#5(tuple#2(z0, z1)) -> breadth(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) empty(z0) -> tuple#2(nil, nil) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 startBreadth(z0) -> startBreadth#1(z0) startBreadth#1(::(z0, z1)) -> startBreadth#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(z0, z1)) -> breadth(z0, z1) Types: BREADTH :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c c :: c1 -> c18 -> c BREADTH#1 :: tuple#2::::nil:tuple#4 -> c1 dequeue :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 DEQUEUE :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c18 tuple#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c1 :: c2:c3 -> c1 BREADTH#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c2:c3 :: :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c2 :: c4 -> c5 -> c2:c3 BREADTH#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c4 breadth#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 BREADTH#4 :: tuple#2::::nil:tuple#4 -> c5 nil :: tuple#2::::nil:tuple#4 c3 :: c2:c3 c4 :: c6 -> c28 -> c4 BREADTH#5 :: tuple#2::::nil:tuple#4 -> c6 enqueues :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 ENQUEUES :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c28 tuple#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c5 :: c7 -> c5 CHILDREN :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c7 c6 :: c -> c6 c7 :: c8:c9 -> c7 CHILDREN#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c8:c9 c8 :: c12:c13 -> c8:c9 CHILDREN#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c12:c13 c9 :: c10:c11 -> c8:c9 CHILDREN#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c10:c11 c10 :: c10:c11 c11 :: c10:c11 c12 :: c12:c13 c13 :: c12:c13 COPYOVER :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c14 c14 :: c15 -> c14 COPYOVER#1 :: tuple#2::::nil:tuple#4 -> c15 c15 :: c16:c17 -> c15 COPYOVER#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c16:c17 c16 :: c14 -> c16:c17 c17 :: c16:c17 c18 :: c19 -> c18 DEQUEUE#1 :: tuple#2::::nil:tuple#4 -> c19 c19 :: c20:c21 -> c19 DEQUEUE#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c20:c21 c20 :: c20:c21 c21 :: c22:c23 -> c20:c21 DEQUEUE#3 :: tuple#2::::nil:tuple#4 -> c22:c23 c22 :: c24 -> c14 -> c22:c23 DEQUEUE#4 :: tuple#2::::nil:tuple#4 -> c24 copyover :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c23 :: c22:c23 c24 :: c18 -> c24 EMPTY :: #unit -> c25 c25 :: c25 ENQUEUE :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c26 c26 :: c27 -> c26 ENQUEUE#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c27 c27 :: c27 c28 :: c29:c30 -> c28 ENQUEUES#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c29:c30 c29 :: c28 -> c26 -> c29:c30 enqueue :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c30 :: c29:c30 STARTBREADTH :: tuple#2::::nil:tuple#4 -> c31 c31 :: c32:c33 -> c31 STARTBREADTH#1 :: tuple#2::::nil:tuple#4 -> c32:c33 c32 :: c34 -> c26 -> c25 -> c32:c33 STARTBREADTH#2 :: tuple#2::::nil:tuple#4 -> c34 empty :: #unit -> tuple#2::::nil:tuple#4 #unit :: #unit c33 :: c32:c33 c34 :: c -> c34 breadth :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#5 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueue#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueues#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 startBreadth :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 startBreadth#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 startBreadth#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 hole_c1_35 :: c hole_tuple#2::::nil:tuple#42_35 :: tuple#2::::nil:tuple#4 hole_c13_35 :: c1 hole_c184_35 :: c18 hole_c2:c35_35 :: c2:c3 hole_c46_35 :: c4 hole_c57_35 :: c5 hole_c68_35 :: c6 hole_c289_35 :: c28 hole_c710_35 :: c7 hole_c8:c911_35 :: c8:c9 hole_c12:c1312_35 :: c12:c13 hole_c10:c1113_35 :: c10:c11 hole_c1414_35 :: c14 hole_c1515_35 :: c15 hole_c16:c1716_35 :: c16:c17 hole_c1917_35 :: c19 hole_c20:c2118_35 :: c20:c21 hole_c22:c2319_35 :: c22:c23 hole_c2420_35 :: c24 hole_c2521_35 :: c25 hole_#unit22_35 :: #unit hole_c2623_35 :: c26 hole_c2724_35 :: c27 hole_c29:c3025_35 :: c29:c30 hole_c3126_35 :: c31 hole_c32:c3327_35 :: c32:c33 hole_c3428_35 :: c34 gen_tuple#2::::nil:tuple#429_35 :: Nat -> tuple#2::::nil:tuple#4 ---------------------------------------- (15) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: BREADTH#1, dequeue, DEQUEUE, BREADTH#5, enqueues, ENQUEUES, COPYOVER, COPYOVER#1, DEQUEUE#1, DEQUEUE#3, DEQUEUE#4, copyover, ENQUEUES#1, breadth#1, breadth#5, copyover#1, dequeue#1, dequeue#3, dequeue#4, enqueues#1 They will be analysed ascendingly in the following order: BREADTH#1 = BREADTH#5 enqueues < BREADTH#1 ENQUEUES < BREADTH#1 dequeue < BREADTH#5 dequeue < breadth#5 dequeue = dequeue#1 dequeue = dequeue#3 dequeue = dequeue#4 DEQUEUE < BREADTH#5 DEQUEUE = DEQUEUE#1 DEQUEUE = DEQUEUE#3 DEQUEUE = DEQUEUE#4 enqueues < breadth#1 enqueues = enqueues#1 ENQUEUES = ENQUEUES#1 COPYOVER = COPYOVER#1 COPYOVER < DEQUEUE#3 DEQUEUE#1 = DEQUEUE#3 DEQUEUE#1 = DEQUEUE#4 DEQUEUE#3 = DEQUEUE#4 copyover < DEQUEUE#3 copyover = copyover#1 copyover < dequeue#3 breadth#1 = breadth#5 dequeue#1 = dequeue#3 dequeue#1 = dequeue#4 dequeue#3 = dequeue#4 ---------------------------------------- (16) Obligation: Innermost TRS: Rules: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2), BREADTH#4(z0)) BREADTH#2(nil, z0) -> c3 BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#4(tuple#4(z0, z1, z2, z3)) -> c5(CHILDREN(z0, z1, z2, z3)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) CHILDREN(z0, z1, z2, z3) -> c7(CHILDREN#1(z2, z1, z3)) CHILDREN#1(::(z0, z1), z2, z3) -> c8(CHILDREN#3(z3, z2, z0, z1)) CHILDREN#1(nil, z0, z1) -> c9(CHILDREN#2(z1, z0)) CHILDREN#2(::(z0, z1), z2) -> c10 CHILDREN#2(nil, z0) -> c11 CHILDREN#3(::(z0, z1), z2, z3, z4) -> c12 CHILDREN#3(nil, z0, z1, z2) -> c13 COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) COPYOVER#2(nil, z0) -> c17 DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(::(z0, z1), z2) -> c20 DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(nil) -> c23 DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) EMPTY(z0) -> c25 ENQUEUE(z0, z1) -> c26(ENQUEUE#1(z1, z0)) ENQUEUE#1(tuple#2(z0, z1), z2) -> c27 ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2)), ENQUEUE(z0, z2)) ENQUEUES#1(nil, z0) -> c30 STARTBREADTH(z0) -> c31(STARTBREADTH#1(z0)) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))), ENQUEUE(tuple#4(z0, z0, z1, z1), empty(#unit)), EMPTY(#unit)) STARTBREADTH#1(nil) -> c33 STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) breadth(z0, z1) -> breadth#1(dequeue(z0, z1)) breadth#1(tuple#2(z0, z1)) -> breadth#2(z1, z0) breadth#2(::(z0, z1), z2) -> breadth#3(breadth#4(z0), z2) breadth#2(nil, z0) -> nil breadth#3(tuple#2(z0, z1), z2) -> ::(z0, breadth#5(enqueues(z1, z2))) breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) breadth#5(tuple#2(z0, z1)) -> breadth(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) empty(z0) -> tuple#2(nil, nil) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 startBreadth(z0) -> startBreadth#1(z0) startBreadth#1(::(z0, z1)) -> startBreadth#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(z0, z1)) -> breadth(z0, z1) Types: BREADTH :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c c :: c1 -> c18 -> c BREADTH#1 :: tuple#2::::nil:tuple#4 -> c1 dequeue :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 DEQUEUE :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c18 tuple#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c1 :: c2:c3 -> c1 BREADTH#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c2:c3 :: :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c2 :: c4 -> c5 -> c2:c3 BREADTH#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c4 breadth#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 BREADTH#4 :: tuple#2::::nil:tuple#4 -> c5 nil :: tuple#2::::nil:tuple#4 c3 :: c2:c3 c4 :: c6 -> c28 -> c4 BREADTH#5 :: tuple#2::::nil:tuple#4 -> c6 enqueues :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 ENQUEUES :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c28 tuple#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c5 :: c7 -> c5 CHILDREN :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c7 c6 :: c -> c6 c7 :: c8:c9 -> c7 CHILDREN#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c8:c9 c8 :: c12:c13 -> c8:c9 CHILDREN#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c12:c13 c9 :: c10:c11 -> c8:c9 CHILDREN#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c10:c11 c10 :: c10:c11 c11 :: c10:c11 c12 :: c12:c13 c13 :: c12:c13 COPYOVER :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c14 c14 :: c15 -> c14 COPYOVER#1 :: tuple#2::::nil:tuple#4 -> c15 c15 :: c16:c17 -> c15 COPYOVER#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c16:c17 c16 :: c14 -> c16:c17 c17 :: c16:c17 c18 :: c19 -> c18 DEQUEUE#1 :: tuple#2::::nil:tuple#4 -> c19 c19 :: c20:c21 -> c19 DEQUEUE#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c20:c21 c20 :: c20:c21 c21 :: c22:c23 -> c20:c21 DEQUEUE#3 :: tuple#2::::nil:tuple#4 -> c22:c23 c22 :: c24 -> c14 -> c22:c23 DEQUEUE#4 :: tuple#2::::nil:tuple#4 -> c24 copyover :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c23 :: c22:c23 c24 :: c18 -> c24 EMPTY :: #unit -> c25 c25 :: c25 ENQUEUE :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c26 c26 :: c27 -> c26 ENQUEUE#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c27 c27 :: c27 c28 :: c29:c30 -> c28 ENQUEUES#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c29:c30 c29 :: c28 -> c26 -> c29:c30 enqueue :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c30 :: c29:c30 STARTBREADTH :: tuple#2::::nil:tuple#4 -> c31 c31 :: c32:c33 -> c31 STARTBREADTH#1 :: tuple#2::::nil:tuple#4 -> c32:c33 c32 :: c34 -> c26 -> c25 -> c32:c33 STARTBREADTH#2 :: tuple#2::::nil:tuple#4 -> c34 empty :: #unit -> tuple#2::::nil:tuple#4 #unit :: #unit c33 :: c32:c33 c34 :: c -> c34 breadth :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#5 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueue#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueues#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 startBreadth :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 startBreadth#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 startBreadth#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 hole_c1_35 :: c hole_tuple#2::::nil:tuple#42_35 :: tuple#2::::nil:tuple#4 hole_c13_35 :: c1 hole_c184_35 :: c18 hole_c2:c35_35 :: c2:c3 hole_c46_35 :: c4 hole_c57_35 :: c5 hole_c68_35 :: c6 hole_c289_35 :: c28 hole_c710_35 :: c7 hole_c8:c911_35 :: c8:c9 hole_c12:c1312_35 :: c12:c13 hole_c10:c1113_35 :: c10:c11 hole_c1414_35 :: c14 hole_c1515_35 :: c15 hole_c16:c1716_35 :: c16:c17 hole_c1917_35 :: c19 hole_c20:c2118_35 :: c20:c21 hole_c22:c2319_35 :: c22:c23 hole_c2420_35 :: c24 hole_c2521_35 :: c25 hole_#unit22_35 :: #unit hole_c2623_35 :: c26 hole_c2724_35 :: c27 hole_c29:c3025_35 :: c29:c30 hole_c3126_35 :: c31 hole_c32:c3327_35 :: c32:c33 hole_c3428_35 :: c34 gen_tuple#2::::nil:tuple#429_35 :: Nat -> tuple#2::::nil:tuple#4 Generator Equations: gen_tuple#2::::nil:tuple#429_35(0) <=> nil gen_tuple#2::::nil:tuple#429_35(+(x, 1)) <=> tuple#2(nil, gen_tuple#2::::nil:tuple#429_35(x)) The following defined symbols remain to be analysed: copyover#1, BREADTH#1, dequeue, DEQUEUE, BREADTH#5, enqueues, ENQUEUES, COPYOVER, COPYOVER#1, DEQUEUE#1, DEQUEUE#3, DEQUEUE#4, copyover, ENQUEUES#1, breadth#1, breadth#5, dequeue#1, dequeue#3, dequeue#4, enqueues#1 They will be analysed ascendingly in the following order: BREADTH#1 = BREADTH#5 enqueues < BREADTH#1 ENQUEUES < BREADTH#1 dequeue < BREADTH#5 dequeue < breadth#5 dequeue = dequeue#1 dequeue = dequeue#3 dequeue = dequeue#4 DEQUEUE < BREADTH#5 DEQUEUE = DEQUEUE#1 DEQUEUE = DEQUEUE#3 DEQUEUE = DEQUEUE#4 enqueues < breadth#1 enqueues = enqueues#1 ENQUEUES = ENQUEUES#1 COPYOVER = COPYOVER#1 COPYOVER < DEQUEUE#3 DEQUEUE#1 = DEQUEUE#3 DEQUEUE#1 = DEQUEUE#4 DEQUEUE#3 = DEQUEUE#4 copyover < DEQUEUE#3 copyover = copyover#1 copyover < dequeue#3 breadth#1 = breadth#5 dequeue#1 = dequeue#3 dequeue#1 = dequeue#4 dequeue#3 = dequeue#4 ---------------------------------------- (17) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (18) Obligation: Complexity Dependency Tuples Problem Rules: breadth(z0, z1) -> breadth#1(dequeue(z0, z1)) breadth#1(tuple#2(z0, z1)) -> breadth#2(z1, z0) breadth#2(::(z0, z1), z2) -> breadth#3(breadth#4(z0), z2) breadth#2(nil, z0) -> nil breadth#3(tuple#2(z0, z1), z2) -> ::(z0, breadth#5(enqueues(z1, z2))) breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) breadth#5(tuple#2(z0, z1)) -> breadth(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) empty(z0) -> tuple#2(nil, nil) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 startBreadth(z0) -> startBreadth#1(z0) startBreadth#1(::(z0, z1)) -> startBreadth#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(z0, z1)) -> breadth(z0, z1) Tuples: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2), BREADTH#4(z0)) BREADTH#2(nil, z0) -> c3 BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#4(tuple#4(z0, z1, z2, z3)) -> c5(CHILDREN(z0, z1, z2, z3)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) CHILDREN(z0, z1, z2, z3) -> c7(CHILDREN#1(z2, z1, z3)) CHILDREN#1(::(z0, z1), z2, z3) -> c8(CHILDREN#3(z3, z2, z0, z1)) CHILDREN#1(nil, z0, z1) -> c9(CHILDREN#2(z1, z0)) CHILDREN#2(::(z0, z1), z2) -> c10 CHILDREN#2(nil, z0) -> c11 CHILDREN#3(::(z0, z1), z2, z3, z4) -> c12 CHILDREN#3(nil, z0, z1, z2) -> c13 COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) COPYOVER#2(nil, z0) -> c17 DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(::(z0, z1), z2) -> c20 DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(nil) -> c23 DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) EMPTY(z0) -> c25 ENQUEUE(z0, z1) -> c26(ENQUEUE#1(z1, z0)) ENQUEUE#1(tuple#2(z0, z1), z2) -> c27 ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2)), ENQUEUE(z0, z2)) ENQUEUES#1(nil, z0) -> c30 STARTBREADTH(z0) -> c31(STARTBREADTH#1(z0)) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))), ENQUEUE(tuple#4(z0, z0, z1, z1), empty(#unit)), EMPTY(#unit)) STARTBREADTH#1(nil) -> c33 STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) S tuples: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2), BREADTH#4(z0)) BREADTH#2(nil, z0) -> c3 BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#4(tuple#4(z0, z1, z2, z3)) -> c5(CHILDREN(z0, z1, z2, z3)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) CHILDREN(z0, z1, z2, z3) -> c7(CHILDREN#1(z2, z1, z3)) CHILDREN#1(::(z0, z1), z2, z3) -> c8(CHILDREN#3(z3, z2, z0, z1)) CHILDREN#1(nil, z0, z1) -> c9(CHILDREN#2(z1, z0)) CHILDREN#2(::(z0, z1), z2) -> c10 CHILDREN#2(nil, z0) -> c11 CHILDREN#3(::(z0, z1), z2, z3, z4) -> c12 CHILDREN#3(nil, z0, z1, z2) -> c13 COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) COPYOVER#2(nil, z0) -> c17 DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(::(z0, z1), z2) -> c20 DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(nil) -> c23 DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) EMPTY(z0) -> c25 ENQUEUE(z0, z1) -> c26(ENQUEUE#1(z1, z0)) ENQUEUE#1(tuple#2(z0, z1), z2) -> c27 ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2)), ENQUEUE(z0, z2)) ENQUEUES#1(nil, z0) -> c30 STARTBREADTH(z0) -> c31(STARTBREADTH#1(z0)) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))), ENQUEUE(tuple#4(z0, z0, z1, z1), empty(#unit)), EMPTY(#unit)) STARTBREADTH#1(nil) -> c33 STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) K tuples:none Defined Rule Symbols: breadth_2, breadth#1_1, breadth#2_2, breadth#3_2, breadth#4_1, breadth#5_1, children_4, children#1_3, children#2_2, children#3_4, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, empty_1, enqueue_2, enqueue#1_2, enqueues_2, enqueues#1_2, startBreadth_1, startBreadth#1_1, startBreadth#2_1 Defined Pair Symbols: BREADTH_2, BREADTH#1_1, BREADTH#2_2, BREADTH#3_2, BREADTH#4_1, BREADTH#5_1, CHILDREN_4, CHILDREN#1_3, CHILDREN#2_2, CHILDREN#3_4, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#3_1, DEQUEUE#4_1, EMPTY_1, ENQUEUE_2, ENQUEUE#1_2, ENQUEUES_2, ENQUEUES#1_2, STARTBREADTH_1, STARTBREADTH#1_1, STARTBREADTH#2_1 Compound Symbols: c_2, c1_1, c2_2, c3, c4_2, c5_1, c6_1, c7_1, c8_1, c9_1, c10, c11, c12, c13, c14_1, c15_1, c16_1, c17, c18_1, c19_1, c20, c21_1, c22_2, c23, c24_1, c25, c26_1, c27, c28_1, c29_2, c30, c31_1, c32_3, c33, c34_1 ---------------------------------------- (19) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: STARTBREADTH(z0) -> c31(STARTBREADTH#1(z0)) Removed 17 trailing nodes: DEQUEUE#2(::(z0, z1), z2) -> c20 CHILDREN#1(nil, z0, z1) -> c9(CHILDREN#2(z1, z0)) BREADTH#2(nil, z0) -> c3 COPYOVER#2(nil, z0) -> c17 BREADTH#4(tuple#4(z0, z1, z2, z3)) -> c5(CHILDREN(z0, z1, z2, z3)) CHILDREN(z0, z1, z2, z3) -> c7(CHILDREN#1(z2, z1, z3)) CHILDREN#3(::(z0, z1), z2, z3, z4) -> c12 ENQUEUE#1(tuple#2(z0, z1), z2) -> c27 EMPTY(z0) -> c25 CHILDREN#2(::(z0, z1), z2) -> c10 ENQUEUE(z0, z1) -> c26(ENQUEUE#1(z1, z0)) CHILDREN#3(nil, z0, z1, z2) -> c13 CHILDREN#1(::(z0, z1), z2, z3) -> c8(CHILDREN#3(z3, z2, z0, z1)) ENQUEUES#1(nil, z0) -> c30 CHILDREN#2(nil, z0) -> c11 STARTBREADTH#1(nil) -> c33 DEQUEUE#3(nil) -> c23 ---------------------------------------- (20) Obligation: Complexity Dependency Tuples Problem Rules: breadth(z0, z1) -> breadth#1(dequeue(z0, z1)) breadth#1(tuple#2(z0, z1)) -> breadth#2(z1, z0) breadth#2(::(z0, z1), z2) -> breadth#3(breadth#4(z0), z2) breadth#2(nil, z0) -> nil breadth#3(tuple#2(z0, z1), z2) -> ::(z0, breadth#5(enqueues(z1, z2))) breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) breadth#5(tuple#2(z0, z1)) -> breadth(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) empty(z0) -> tuple#2(nil, nil) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 startBreadth(z0) -> startBreadth#1(z0) startBreadth#1(::(z0, z1)) -> startBreadth#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(z0, z1)) -> breadth(z0, z1) Tuples: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2), BREADTH#4(z0)) BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2)), ENQUEUE(z0, z2)) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))), ENQUEUE(tuple#4(z0, z0, z1, z1), empty(#unit)), EMPTY(#unit)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) S tuples: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2), BREADTH#4(z0)) BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2)), ENQUEUE(z0, z2)) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))), ENQUEUE(tuple#4(z0, z0, z1, z1), empty(#unit)), EMPTY(#unit)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) K tuples:none Defined Rule Symbols: breadth_2, breadth#1_1, breadth#2_2, breadth#3_2, breadth#4_1, breadth#5_1, children_4, children#1_3, children#2_2, children#3_4, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, empty_1, enqueue_2, enqueue#1_2, enqueues_2, enqueues#1_2, startBreadth_1, startBreadth#1_1, startBreadth#2_1 Defined Pair Symbols: BREADTH_2, BREADTH#1_1, BREADTH#2_2, BREADTH#3_2, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#3_1, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, STARTBREADTH#1_1, STARTBREADTH#2_1 Compound Symbols: c_2, c1_1, c2_2, c4_2, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c22_2, c24_1, c28_1, c29_2, c32_3, c34_1 ---------------------------------------- (21) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 4 trailing tuple parts ---------------------------------------- (22) Obligation: Complexity Dependency Tuples Problem Rules: breadth(z0, z1) -> breadth#1(dequeue(z0, z1)) breadth#1(tuple#2(z0, z1)) -> breadth#2(z1, z0) breadth#2(::(z0, z1), z2) -> breadth#3(breadth#4(z0), z2) breadth#2(nil, z0) -> nil breadth#3(tuple#2(z0, z1), z2) -> ::(z0, breadth#5(enqueues(z1, z2))) breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) breadth#5(tuple#2(z0, z1)) -> breadth(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) empty(z0) -> tuple#2(nil, nil) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 startBreadth(z0) -> startBreadth#1(z0) startBreadth#1(::(z0, z1)) -> startBreadth#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(z0, z1)) -> breadth(z0, z1) Tuples: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) S tuples: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) K tuples:none Defined Rule Symbols: breadth_2, breadth#1_1, breadth#2_2, breadth#3_2, breadth#4_1, breadth#5_1, children_4, children#1_3, children#2_2, children#3_4, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, empty_1, enqueue_2, enqueue#1_2, enqueues_2, enqueues#1_2, startBreadth_1, startBreadth#1_1, startBreadth#2_1 Defined Pair Symbols: BREADTH_2, BREADTH#1_1, BREADTH#3_2, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#3_1, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, BREADTH#2_2, ENQUEUES#1_2, STARTBREADTH#1_1 Compound Symbols: c_2, c1_1, c4_2, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c22_2, c24_1, c28_1, c34_1, c2_1, c29_1, c32_1 ---------------------------------------- (23) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ---------------------------------------- (24) Obligation: Complexity Dependency Tuples Problem Rules: breadth(z0, z1) -> breadth#1(dequeue(z0, z1)) breadth#1(tuple#2(z0, z1)) -> breadth#2(z1, z0) breadth#2(::(z0, z1), z2) -> breadth#3(breadth#4(z0), z2) breadth#2(nil, z0) -> nil breadth#3(tuple#2(z0, z1), z2) -> ::(z0, breadth#5(enqueues(z1, z2))) breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) breadth#5(tuple#2(z0, z1)) -> breadth(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) empty(z0) -> tuple#2(nil, nil) enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 startBreadth(z0) -> startBreadth#1(z0) startBreadth#1(::(z0, z1)) -> startBreadth#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(z0, z1)) -> breadth(z0, z1) Tuples: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) S tuples: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) Defined Rule Symbols: breadth_2, breadth#1_1, breadth#2_2, breadth#3_2, breadth#4_1, breadth#5_1, children_4, children#1_3, children#2_2, children#3_4, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, empty_1, enqueue_2, enqueue#1_2, enqueues_2, enqueues#1_2, startBreadth_1, startBreadth#1_1, startBreadth#2_1 Defined Pair Symbols: BREADTH_2, BREADTH#1_1, BREADTH#3_2, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#3_1, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, BREADTH#2_2, ENQUEUES#1_2, STARTBREADTH#1_1 Compound Symbols: c_2, c1_1, c4_2, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c22_2, c24_1, c28_1, c34_1, c2_1, c29_1, c32_1 ---------------------------------------- (25) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: breadth(z0, z1) -> breadth#1(dequeue(z0, z1)) breadth#1(tuple#2(z0, z1)) -> breadth#2(z1, z0) breadth#2(::(z0, z1), z2) -> breadth#3(breadth#4(z0), z2) breadth#2(nil, z0) -> nil breadth#3(tuple#2(z0, z1), z2) -> ::(z0, breadth#5(enqueues(z1, z2))) breadth#5(tuple#2(z0, z1)) -> breadth(z0, z1) startBreadth(z0) -> startBreadth#1(z0) startBreadth#1(::(z0, z1)) -> startBreadth#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit))) startBreadth#1(nil) -> nil startBreadth#2(tuple#2(z0, z1)) -> breadth(z0, z1) ---------------------------------------- (26) Obligation: Complexity Dependency Tuples Problem Rules: dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil empty(z0) -> tuple#2(nil, nil) Tuples: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) S tuples: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) Defined Rule Symbols: dequeue_2, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, enqueues_2, enqueues#1_2, enqueue_2, enqueue#1_2, breadth#4_1, children_4, children#1_3, children#3_4, children#2_2, empty_1 Defined Pair Symbols: BREADTH_2, BREADTH#1_1, BREADTH#3_2, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#3_1, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, BREADTH#2_2, ENQUEUES#1_2, STARTBREADTH#1_1 Compound Symbols: c_2, c1_1, c4_2, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c22_2, c24_1, c28_1, c34_1, c2_1, c29_1, c32_1 ---------------------------------------- (27) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (28) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) The (relative) TRS S consists of the following rules: STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil empty(z0) -> tuple#2(nil, nil) Rewrite Strategy: INNERMOST ---------------------------------------- (29) RelTrsToTrsProof (UPPER BOUND(ID)) transformed relative TRS to TRS ---------------------------------------- (30) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil empty(z0) -> tuple#2(nil, nil) S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (31) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (32) 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: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) [1] BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) [1] BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) [1] BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) [1] COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) [1] COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) [1] COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) [1] DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) [1] DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) [1] DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) [1] DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) [1] DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) [1] ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) [1] BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) [1] ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) [1] STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) [0] STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) [0] dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) [0] dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) [0] dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) [0] dequeue#2(nil, z0) -> dequeue#3(z0) [0] dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) [0] dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) [0] dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) [0] copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) [0] copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) [0] copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) [0] copyover#2(nil, z0) -> tuple#2(nil, z0) [0] enqueues(z0, z1) -> enqueues#1(z0, z1) [0] enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) [0] enqueues#1(nil, z0) -> z0 [0] enqueue(z0, z1) -> enqueue#1(z1, z0) [0] enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) [0] breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) [0] children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) [0] children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) [0] children#1(nil, z0, z1) -> children#2(z1, z0) [0] children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) [0] children#3(nil, z0, z1, z2) -> nil [0] children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) [0] children#2(nil, z0) -> nil [0] empty(z0) -> tuple#2(nil, nil) [0] Rewrite Strategy: INNERMOST ---------------------------------------- (33) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (34) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) [1] BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) [1] BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) [1] BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) [1] COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) [1] COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) [1] COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) [1] DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) [1] DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) [1] DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) [1] DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) [1] DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) [1] ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) [1] BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) [1] ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) [1] STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) [0] STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) [0] dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) [0] dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) [0] dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) [0] dequeue#2(nil, z0) -> dequeue#3(z0) [0] dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) [0] dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) [0] dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) [0] copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) [0] copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) [0] copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) [0] copyover#2(nil, z0) -> tuple#2(nil, z0) [0] enqueues(z0, z1) -> enqueues#1(z0, z1) [0] enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) [0] enqueues#1(nil, z0) -> z0 [0] enqueue(z0, z1) -> enqueue#1(z1, z0) [0] enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) [0] breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) [0] children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) [0] children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) [0] children#1(nil, z0, z1) -> children#2(z1, z0) [0] children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) [0] children#3(nil, z0, z1, z2) -> nil [0] children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) [0] children#2(nil, z0) -> nil [0] empty(z0) -> tuple#2(nil, nil) [0] The TRS has the following type information: BREADTH :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c c :: c1 -> c18 -> c BREADTH#1 :: tuple#2::::nil:tuple#4 -> c1 dequeue :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 DEQUEUE :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c18 tuple#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c1 :: c2 -> c1 BREADTH#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c2 BREADTH#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c4 c4 :: c6 -> c28 -> c4 BREADTH#5 :: tuple#2::::nil:tuple#4 -> c6 enqueues :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 ENQUEUES :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c28 c6 :: c -> c6 COPYOVER :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c14 c14 :: c15 -> c14 COPYOVER#1 :: tuple#2::::nil:tuple#4 -> c15 c15 :: c16 -> c15 COPYOVER#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c16 :: :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c16 :: c14 -> c16 c18 :: c19 -> c18 DEQUEUE#1 :: tuple#2::::nil:tuple#4 -> c19 c19 :: c21 -> c19 DEQUEUE#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c21 nil :: tuple#2::::nil:tuple#4 c21 :: c22 -> c21 DEQUEUE#3 :: tuple#2::::nil:tuple#4 -> c22 c22 :: c24 -> c14 -> c22 DEQUEUE#4 :: tuple#2::::nil:tuple#4 -> c24 copyover :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c24 :: c18 -> c24 c28 :: c29 -> c28 ENQUEUES#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c29 c2 :: c4 -> c2 breadth#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c29 :: c28 -> c29 enqueue :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 STARTBREADTH#2 :: tuple#2::::nil:tuple#4 -> c34 c34 :: c -> c34 STARTBREADTH#1 :: tuple#2::::nil:tuple#4 -> c32 c32 :: c34 -> c32 tuple#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 empty :: #unit -> tuple#2::::nil:tuple#4 #unit :: #unit dequeue#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueues#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueue#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 Rewrite Strategy: INNERMOST ---------------------------------------- (35) 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: BREADTH_2 BREADTH#1_1 BREADTH#3_2 BREADTH#5_1 COPYOVER_2 COPYOVER#1_1 COPYOVER#2_2 DEQUEUE_2 DEQUEUE#1_1 DEQUEUE#2_2 DEQUEUE#3_1 DEQUEUE#4_1 ENQUEUES_2 BREADTH#2_2 ENQUEUES#1_2 (c) The following functions are completely defined: STARTBREADTH#2_1 STARTBREADTH#1_1 dequeue_2 dequeue#1_1 dequeue#2_2 dequeue#3_1 dequeue#4_1 copyover_2 copyover#1_1 copyover#2_2 enqueues_2 enqueues#1_2 enqueue_2 enqueue#1_2 breadth#4_1 children_4 children#1_3 children#3_4 children#2_2 empty_1 Due to the following rules being added: STARTBREADTH#2(v0) -> const15 [0] STARTBREADTH#1(v0) -> const16 [0] dequeue(v0, v1) -> nil [0] dequeue#1(v0) -> nil [0] dequeue#2(v0, v1) -> nil [0] dequeue#3(v0) -> nil [0] dequeue#4(v0) -> nil [0] copyover(v0, v1) -> nil [0] copyover#1(v0) -> nil [0] copyover#2(v0, v1) -> nil [0] enqueues(v0, v1) -> nil [0] enqueues#1(v0, v1) -> nil [0] enqueue(v0, v1) -> nil [0] enqueue#1(v0, v1) -> nil [0] breadth#4(v0) -> nil [0] children(v0, v1, v2, v3) -> nil [0] children#1(v0, v1, v2) -> nil [0] children#3(v0, v1, v2, v3) -> nil [0] children#2(v0, v1) -> nil [0] empty(v0) -> nil [0] And the following fresh constants: const15, const16, const, const1, const2, const3, const4, const5, const6, const7, const8, const9, const10, const11, const12, const13, const14 ---------------------------------------- (36) 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: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) [1] BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) [1] BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) [1] BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) [1] COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) [1] COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) [1] COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) [1] DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) [1] DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) [1] DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) [1] DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) [1] DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) [1] ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) [1] BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) [1] ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) [1] STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) [0] STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) [0] dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) [0] dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) [0] dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) [0] dequeue#2(nil, z0) -> dequeue#3(z0) [0] dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) [0] dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) [0] dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) [0] copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) [0] copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) [0] copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) [0] copyover#2(nil, z0) -> tuple#2(nil, z0) [0] enqueues(z0, z1) -> enqueues#1(z0, z1) [0] enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) [0] enqueues#1(nil, z0) -> z0 [0] enqueue(z0, z1) -> enqueue#1(z1, z0) [0] enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) [0] breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) [0] children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) [0] children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) [0] children#1(nil, z0, z1) -> children#2(z1, z0) [0] children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) [0] children#3(nil, z0, z1, z2) -> nil [0] children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) [0] children#2(nil, z0) -> nil [0] empty(z0) -> tuple#2(nil, nil) [0] STARTBREADTH#2(v0) -> const15 [0] STARTBREADTH#1(v0) -> const16 [0] dequeue(v0, v1) -> nil [0] dequeue#1(v0) -> nil [0] dequeue#2(v0, v1) -> nil [0] dequeue#3(v0) -> nil [0] dequeue#4(v0) -> nil [0] copyover(v0, v1) -> nil [0] copyover#1(v0) -> nil [0] copyover#2(v0, v1) -> nil [0] enqueues(v0, v1) -> nil [0] enqueues#1(v0, v1) -> nil [0] enqueue(v0, v1) -> nil [0] enqueue#1(v0, v1) -> nil [0] breadth#4(v0) -> nil [0] children(v0, v1, v2, v3) -> nil [0] children#1(v0, v1, v2) -> nil [0] children#3(v0, v1, v2, v3) -> nil [0] children#2(v0, v1) -> nil [0] empty(v0) -> nil [0] The TRS has the following type information: BREADTH :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c c :: c1 -> c18 -> c BREADTH#1 :: tuple#2::::nil:tuple#4 -> c1 dequeue :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 DEQUEUE :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c18 tuple#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c1 :: c2 -> c1 BREADTH#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c2 BREADTH#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c4 c4 :: c6 -> c28 -> c4 BREADTH#5 :: tuple#2::::nil:tuple#4 -> c6 enqueues :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 ENQUEUES :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c28 c6 :: c -> c6 COPYOVER :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c14 c14 :: c15 -> c14 COPYOVER#1 :: tuple#2::::nil:tuple#4 -> c15 c15 :: c16 -> c15 COPYOVER#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c16 :: :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c16 :: c14 -> c16 c18 :: c19 -> c18 DEQUEUE#1 :: tuple#2::::nil:tuple#4 -> c19 c19 :: c21 -> c19 DEQUEUE#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c21 nil :: tuple#2::::nil:tuple#4 c21 :: c22 -> c21 DEQUEUE#3 :: tuple#2::::nil:tuple#4 -> c22 c22 :: c24 -> c14 -> c22 DEQUEUE#4 :: tuple#2::::nil:tuple#4 -> c24 copyover :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c24 :: c18 -> c24 c28 :: c29 -> c28 ENQUEUES#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c29 c2 :: c4 -> c2 breadth#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c29 :: c28 -> c29 enqueue :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 STARTBREADTH#2 :: tuple#2::::nil:tuple#4 -> c34:const15 c34 :: c -> c34:const15 STARTBREADTH#1 :: tuple#2::::nil:tuple#4 -> c32:const16 c32 :: c34:const15 -> c32:const16 tuple#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 empty :: #unit -> tuple#2::::nil:tuple#4 #unit :: #unit dequeue#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueues#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueue#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 const15 :: c34:const15 const16 :: c32:const16 const :: c const1 :: c1 const2 :: c18 const3 :: c2 const4 :: c4 const5 :: c6 const6 :: c28 const7 :: c14 const8 :: c15 const9 :: c16 const10 :: c19 const11 :: c21 const12 :: c22 const13 :: c24 const14 :: c29 Rewrite Strategy: INNERMOST ---------------------------------------- (37) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (38) 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: BREADTH(z0, z1) -> c(BREADTH#1(dequeue#1(tuple#2(z0, z1))), DEQUEUE(z0, z1)) [1] BREADTH(z0, z1) -> c(BREADTH#1(nil), DEQUEUE(z0, z1)) [1] BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) [1] BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues#1(z1, z2)), ENQUEUES(z1, z2)) [1] BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(nil), ENQUEUES(z1, z2)) [1] BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) [1] COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) [1] COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) [1] COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) [1] DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) [1] DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) [1] DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) [1] DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(z0, z1), nil))), COPYOVER(::(z0, z1), nil)) [1] DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(nil), COPYOVER(::(z0, z1), nil)) [1] DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) [1] ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) [1] BREADTH#2(::(tuple#4(z0', z1', z2', z3'), z1), z2) -> c2(BREADTH#3(children(z0', z1', z2', z3'), z2)) [1] BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(nil, z2)) [1] ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue#1(z2, z0))) [1] ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, nil)) [1] STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) [0] STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), tuple#2(nil, nil)))) [0] STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), nil))) [0] dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) [0] dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) [0] dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) [0] dequeue#2(nil, z0) -> dequeue#3(z0) [0] dequeue#3(::(z0, z1)) -> dequeue#4(copyover#1(tuple#2(::(z0, z1), nil))) [0] dequeue#3(::(z0, z1)) -> dequeue#4(nil) [0] dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) [0] dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) [0] copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) [0] copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) [0] copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) [0] copyover#2(nil, z0) -> tuple#2(nil, z0) [0] enqueues(z0, z1) -> enqueues#1(z0, z1) [0] enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue#1(z2, z0)) [0] enqueues#1(::(z0, z1), z2) -> enqueues(z1, nil) [0] enqueues#1(nil, z0) -> z0 [0] enqueue(z0, z1) -> enqueue#1(z1, z0) [0] enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) [0] breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) [0] children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) [0] children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) [0] children#1(nil, z0, z1) -> children#2(z1, z0) [0] children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) [0] children#3(nil, z0, z1, z2) -> nil [0] children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) [0] children#2(nil, z0) -> nil [0] empty(z0) -> tuple#2(nil, nil) [0] STARTBREADTH#2(v0) -> const15 [0] STARTBREADTH#1(v0) -> const16 [0] dequeue(v0, v1) -> nil [0] dequeue#1(v0) -> nil [0] dequeue#2(v0, v1) -> nil [0] dequeue#3(v0) -> nil [0] dequeue#4(v0) -> nil [0] copyover(v0, v1) -> nil [0] copyover#1(v0) -> nil [0] copyover#2(v0, v1) -> nil [0] enqueues(v0, v1) -> nil [0] enqueues#1(v0, v1) -> nil [0] enqueue(v0, v1) -> nil [0] enqueue#1(v0, v1) -> nil [0] breadth#4(v0) -> nil [0] children(v0, v1, v2, v3) -> nil [0] children#1(v0, v1, v2) -> nil [0] children#3(v0, v1, v2, v3) -> nil [0] children#2(v0, v1) -> nil [0] empty(v0) -> nil [0] The TRS has the following type information: BREADTH :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c c :: c1 -> c18 -> c BREADTH#1 :: tuple#2::::nil:tuple#4 -> c1 dequeue :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 DEQUEUE :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c18 tuple#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c1 :: c2 -> c1 BREADTH#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c2 BREADTH#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c4 c4 :: c6 -> c28 -> c4 BREADTH#5 :: tuple#2::::nil:tuple#4 -> c6 enqueues :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 ENQUEUES :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c28 c6 :: c -> c6 COPYOVER :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c14 c14 :: c15 -> c14 COPYOVER#1 :: tuple#2::::nil:tuple#4 -> c15 c15 :: c16 -> c15 COPYOVER#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c16 :: :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c16 :: c14 -> c16 c18 :: c19 -> c18 DEQUEUE#1 :: tuple#2::::nil:tuple#4 -> c19 c19 :: c21 -> c19 DEQUEUE#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c21 nil :: tuple#2::::nil:tuple#4 c21 :: c22 -> c21 DEQUEUE#3 :: tuple#2::::nil:tuple#4 -> c22 c22 :: c24 -> c14 -> c22 DEQUEUE#4 :: tuple#2::::nil:tuple#4 -> c24 copyover :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c24 :: c18 -> c24 c28 :: c29 -> c28 ENQUEUES#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> c29 c2 :: c4 -> c2 breadth#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 c29 :: c28 -> c29 enqueue :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 STARTBREADTH#2 :: tuple#2::::nil:tuple#4 -> c34:const15 c34 :: c -> c34:const15 STARTBREADTH#1 :: tuple#2::::nil:tuple#4 -> c32:const16 c32 :: c34:const15 -> c32:const16 tuple#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 empty :: #unit -> tuple#2::::nil:tuple#4 #unit :: #unit dequeue#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueues#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueue#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 const15 :: c34:const15 const16 :: c32:const16 const :: c const1 :: c1 const2 :: c18 const3 :: c2 const4 :: c4 const5 :: c6 const6 :: c28 const7 :: c14 const8 :: c15 const9 :: c16 const10 :: c19 const11 :: c21 const12 :: c22 const13 :: c24 const14 :: c29 Rewrite Strategy: INNERMOST ---------------------------------------- (39) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: nil => 0 #unit => 0 const15 => 0 const16 => 0 const => 0 const1 => 0 const2 => 0 const3 => 0 const4 => 0 const5 => 0 const6 => 0 const7 => 0 const8 => 0 const9 => 0 const10 => 0 const11 => 0 const12 => 0 const13 => 0 const14 => 0 ---------------------------------------- (40) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z0 + z1)) + DEQUEUE(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z2) :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' = z2, z2 >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z2)) + ENQUEUES(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z0 + z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z0 + z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z0) :|: z0 >= 0, z = 0, z' = z0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, enqueue#1(z2, z0)) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue(1 + z0 + z0 + z1 + z1, 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue(1 + z0 + z0 + z1 + z1, 1 + 0 + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z5 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z0 + z1) + children#1(z2, z1, z3) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z5 = z3, z2 >= 0, z3 >= 0 children#1(z, z', z'') -{ 0 }-> children#3(z3, z2, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 children#1(z, z', z'') -{ 0 }-> children#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 0, z' = z0, z'' = z1 children#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 children#2(z, z') -{ 0 }-> 0 :|: z0 >= 0, z = 0, z' = z0 children#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z2 + 0 + z1) + 0 :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 0, z5 = z2, z' = z0, z2 >= 0, z'' = z1 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z5 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z3 + z2 + 0 + z4) + (1 + (1 + z3 + z0 + z4 + z1) + 0) :|: z1 >= 0, z5 = z4, z' = z2, z0 >= 0, z'' = z3, z4 >= 0, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z0 + z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 copyover(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 copyover#2(z, z') -{ 0 }-> 1 + 0 + z0 :|: z0 >= 0, z = 0, z' = z0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z0 + z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 dequeue(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z0) :|: z0 >= 0, z = 0, z' = z0 dequeue#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z2 + z1) + (1 + z0 + 0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 empty(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z = z0, z0 >= 0 enqueue(z, z') -{ 0 }-> enqueue#1(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 enqueue(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueue#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z2 + z0) + z1 :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 enqueues(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueues#1(z, z') -{ 0 }-> z0 :|: z0 >= 0, z = 0, z' = z0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, enqueue#1(z2, z0)) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 ---------------------------------------- (41) InliningProof (UPPER BOUND(ID)) Inlined the following terminating rules on right-hand sides where appropriate: enqueue#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z2 + z0) + z1 :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 0, z5 = z2, z' = z0, z2 >= 0, z'' = z1 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z3 + z2 + 0 + z4) + (1 + (1 + z3 + z0 + z4 + z1) + 0) :|: z1 >= 0, z5 = z4, z' = z2, z0 >= 0, z'' = z3, z4 >= 0, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z5 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 children#2(z, z') -{ 0 }-> 0 :|: z0 >= 0, z = 0, z' = z0 children#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z2 + 0 + z1) + 0 :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 enqueue(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueue(z, z') -{ 0 }-> enqueue#1(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 children#1(z, z', z'') -{ 0 }-> children#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 0, z' = z0, z'' = z1 children#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 children#1(z, z', z'') -{ 0 }-> children#3(z3, z2, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 ---------------------------------------- (42) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z0 + z1)) + DEQUEUE(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z2) :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' = z2, z2 >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z2)) + ENQUEUES(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z0 + z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z0 + z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z0) :|: z0 >= 0, z = 0, z' = z0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0, v0 >= 0, v1 >= 0, z2 = v0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0, z1' >= 0, z0 = z2', z0' >= 0, z2 = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z5 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z0 + z1) + children#3(z3', z2', z0', z1') :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z5 = z3, z2 >= 0, z3 >= 0, z1' >= 0, z1 = z2', z0' >= 0, z3 = z3', z2 = 1 + z0' + z1', z2' >= 0, z3' >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z0 + z1) + children#2(z1', z0') :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z5 = z3, z2 >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z2 = 0, z1 = z0', z3 = z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z0 + z1) + 0 :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z5 = z3, z2 >= 0, z3 >= 0, v0 >= 0, z3 = v2, v1 >= 0, z2 = v0, z1 = v1, v2 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z3 = 0, z1 = z2', z2 = z0', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0, z1 = v3, v0 >= 0, z0 = v2, v1 >= 0, z3 = v0, z2 = v1, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 0, z' = z0, z'' = z1, z0' >= 0, z1 = 0, z0 = z0' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 0, z' = z0, z'' = z1, v0 >= 0, v1 >= 0, z1 = v0, z0 = v1 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z2 + 0 + z1') + 0 :|: z1 >= 0, z0 >= 0, z = 0, z' = z0, z'' = z1, z1' >= 0, z0 = z2, z0' >= 0, z1 = 1 + z0' + z1', z2 >= 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z2' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0, z1' >= 0, z1 = z4, z2 = z2', z0' >= 0, z0 = z3', z4 >= 0, z3 = 1 + z0' + z1', z2' >= 0, z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z0 >= 0, z = 0, z' = z0 children#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z2 + 0 + z1) + 0 :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 0, z5 = z2, z' = z0, z2 >= 0, z'' = z1 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z5 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z3 + z2 + 0 + z4) + (1 + (1 + z3 + z0 + z4 + z1) + 0) :|: z1 >= 0, z5 = z4, z' = z2, z0 >= 0, z'' = z3, z4 >= 0, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z0 + z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 copyover(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 copyover#2(z, z') -{ 0 }-> 1 + 0 + z0 :|: z0 >= 0, z = 0, z' = z0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z0 + z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 dequeue(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z0) :|: z0 >= 0, z = 0, z' = z0 dequeue#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z2 + z1) + (1 + z0 + 0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 empty(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z = z0, z0 >= 0 enqueue(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueue(z, z') -{ 0 }-> 0 :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, v0 >= 0, v1 >= 0, z1 = v0, z0 = v1 enqueue(z, z') -{ 0 }-> 1 + (1 + z2 + z0') + z1' :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, z1' >= 0, z0 = z2, z0' >= 0, z1 = 1 + z0' + z1', z2 >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z2 + z0) + z1 :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 enqueues(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueues#1(z, z') -{ 0 }-> z0 :|: z0 >= 0, z = 0, z' = z0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0, v0 >= 0, v1 >= 0, z2 = v0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0, z1' >= 0, z0 = z2', z0' >= 0, z2 = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 ---------------------------------------- (43) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (44) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z + z')) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z') :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z')) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z + z') :|: z' >= 0, z >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z + z') :|: z' >= 0, z >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z') :|: z' >= 0, z = 0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z, z') :|: z' >= 0, z >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#3(z5, z', z0', z1') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#2(z5, z') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z'' = 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + 0 :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z'' = 0, z1 = z2', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1 = v3, z0 = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z'' = 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z' + 0 + z1') + 0 :|: z'' >= 0, z' >= 0, z = 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z1 = z4, z0' >= 0, z0 = z3', z4 >= 0, z'' = 1 + z0' + z1', z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z' + 0 + z1) + 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z'' + z' + 0 + z5) + (1 + (1 + z'' + z0 + z5 + z1) + 0) :|: z1 >= 0, z0 >= 0, z5 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z' + z1) + (1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue(z, z') -{ 0 }-> 1 + (1 + z + z0') + z1' :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z' + z0) + z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueues#1(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ---------------------------------------- (45) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { children#1 } { empty } { enqueue } { children#3 } { COPYOVER#1, COPYOVER, COPYOVER#2 } { enqueue#1 } { children#2 } { ENQUEUES, ENQUEUES#1 } { enqueues#1, enqueues } { copyover#2, copyover#1, copyover } { children } { DEQUEUE#3, DEQUEUE#4, DEQUEUE#2, DEQUEUE, DEQUEUE#1 } { dequeue, dequeue#3, dequeue#1, dequeue#2, dequeue#4 } { BREADTH#1, BREADTH#2, BREADTH#3, BREADTH#5, BREADTH } { breadth#4 } { STARTBREADTH#2 } { STARTBREADTH#1 } ---------------------------------------- (46) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z + z')) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z') :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z')) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z + z') :|: z' >= 0, z >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z + z') :|: z' >= 0, z >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z') :|: z' >= 0, z = 0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z, z') :|: z' >= 0, z >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#3(z5, z', z0', z1') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#2(z5, z') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z'' = 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + 0 :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z'' = 0, z1 = z2', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1 = v3, z0 = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z'' = 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z' + 0 + z1') + 0 :|: z'' >= 0, z' >= 0, z = 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z1 = z4, z0' >= 0, z0 = z3', z4 >= 0, z'' = 1 + z0' + z1', z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z' + 0 + z1) + 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z'' + z' + 0 + z5) + (1 + (1 + z'' + z0 + z5 + z1) + 0) :|: z1 >= 0, z0 >= 0, z5 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z' + z1) + (1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue(z, z') -{ 0 }-> 1 + (1 + z + z0') + z1' :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z' + z0) + z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueues#1(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {children#1}, {empty}, {enqueue}, {children#3}, {COPYOVER#1,COPYOVER,COPYOVER#2}, {enqueue#1}, {children#2}, {ENQUEUES,ENQUEUES#1}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {DEQUEUE#3,DEQUEUE#4,DEQUEUE#2,DEQUEUE,DEQUEUE#1}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {BREADTH#1,BREADTH#2,BREADTH#3,BREADTH#5,BREADTH}, {breadth#4}, {STARTBREADTH#2}, {STARTBREADTH#1} ---------------------------------------- (47) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (48) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z + z')) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z') :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z')) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z + z') :|: z' >= 0, z >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z + z') :|: z' >= 0, z >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z') :|: z' >= 0, z = 0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z, z') :|: z' >= 0, z >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#3(z5, z', z0', z1') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#2(z5, z') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z'' = 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + 0 :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z'' = 0, z1 = z2', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1 = v3, z0 = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z'' = 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z' + 0 + z1') + 0 :|: z'' >= 0, z' >= 0, z = 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z1 = z4, z0' >= 0, z0 = z3', z4 >= 0, z'' = 1 + z0' + z1', z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z' + 0 + z1) + 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z'' + z' + 0 + z5) + (1 + (1 + z'' + z0 + z5 + z1) + 0) :|: z1 >= 0, z0 >= 0, z5 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z' + z1) + (1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue(z, z') -{ 0 }-> 1 + (1 + z + z0') + z1' :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z' + z0) + z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueues#1(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {children#1}, {empty}, {enqueue}, {children#3}, {COPYOVER#1,COPYOVER,COPYOVER#2}, {enqueue#1}, {children#2}, {ENQUEUES,ENQUEUES#1}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {DEQUEUE#3,DEQUEUE#4,DEQUEUE#2,DEQUEUE,DEQUEUE#1}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {BREADTH#1,BREADTH#2,BREADTH#3,BREADTH#5,BREADTH}, {breadth#4}, {STARTBREADTH#2}, {STARTBREADTH#1} ---------------------------------------- (49) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: children#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + 2*z + z' + z'' ---------------------------------------- (50) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z + z')) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z') :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z')) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z + z') :|: z' >= 0, z >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z + z') :|: z' >= 0, z >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z') :|: z' >= 0, z = 0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z, z') :|: z' >= 0, z >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#3(z5, z', z0', z1') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#2(z5, z') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z'' = 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + 0 :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z'' = 0, z1 = z2', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1 = v3, z0 = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z'' = 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z' + 0 + z1') + 0 :|: z'' >= 0, z' >= 0, z = 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z1 = z4, z0' >= 0, z0 = z3', z4 >= 0, z'' = 1 + z0' + z1', z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z' + 0 + z1) + 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z'' + z' + 0 + z5) + (1 + (1 + z'' + z0 + z5 + z1) + 0) :|: z1 >= 0, z0 >= 0, z5 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z' + z1) + (1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue(z, z') -{ 0 }-> 1 + (1 + z + z0') + z1' :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z' + z0) + z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueues#1(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {children#1}, {empty}, {enqueue}, {children#3}, {COPYOVER#1,COPYOVER,COPYOVER#2}, {enqueue#1}, {children#2}, {ENQUEUES,ENQUEUES#1}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {DEQUEUE#3,DEQUEUE#4,DEQUEUE#2,DEQUEUE,DEQUEUE#1}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {BREADTH#1,BREADTH#2,BREADTH#3,BREADTH#5,BREADTH}, {breadth#4}, {STARTBREADTH#2}, {STARTBREADTH#1} Previous analysis results are: children#1: runtime: ?, size: O(n^1) [1 + 2*z + z' + z''] ---------------------------------------- (51) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: children#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (52) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z + z')) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z') :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z')) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z + z') :|: z' >= 0, z >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z + z') :|: z' >= 0, z >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z') :|: z' >= 0, z = 0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z, z') :|: z' >= 0, z >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#3(z5, z', z0', z1') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#2(z5, z') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z'' = 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + 0 :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z'' = 0, z1 = z2', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1 = v3, z0 = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z'' = 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z' + 0 + z1') + 0 :|: z'' >= 0, z' >= 0, z = 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z1 = z4, z0' >= 0, z0 = z3', z4 >= 0, z'' = 1 + z0' + z1', z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z' + 0 + z1) + 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z'' + z' + 0 + z5) + (1 + (1 + z'' + z0 + z5 + z1) + 0) :|: z1 >= 0, z0 >= 0, z5 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z' + z1) + (1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue(z, z') -{ 0 }-> 1 + (1 + z + z0') + z1' :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z' + z0) + z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueues#1(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {empty}, {enqueue}, {children#3}, {COPYOVER#1,COPYOVER,COPYOVER#2}, {enqueue#1}, {children#2}, {ENQUEUES,ENQUEUES#1}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {DEQUEUE#3,DEQUEUE#4,DEQUEUE#2,DEQUEUE,DEQUEUE#1}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {BREADTH#1,BREADTH#2,BREADTH#3,BREADTH#5,BREADTH}, {breadth#4}, {STARTBREADTH#2}, {STARTBREADTH#1} Previous analysis results are: children#1: runtime: O(1) [0], size: O(n^1) [1 + 2*z + z' + z''] ---------------------------------------- (53) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (54) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z + z')) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z') :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z')) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z + z') :|: z' >= 0, z >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z + z') :|: z' >= 0, z >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z') :|: z' >= 0, z = 0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z, z') :|: z' >= 0, z >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#3(z5, z', z0', z1') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#2(z5, z') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z'' = 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + 0 :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z'' = 0, z1 = z2', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1 = v3, z0 = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z'' = 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z' + 0 + z1') + 0 :|: z'' >= 0, z' >= 0, z = 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z1 = z4, z0' >= 0, z0 = z3', z4 >= 0, z'' = 1 + z0' + z1', z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z' + 0 + z1) + 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z'' + z' + 0 + z5) + (1 + (1 + z'' + z0 + z5 + z1) + 0) :|: z1 >= 0, z0 >= 0, z5 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z' + z1) + (1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue(z, z') -{ 0 }-> 1 + (1 + z + z0') + z1' :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z' + z0) + z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueues#1(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {empty}, {enqueue}, {children#3}, {COPYOVER#1,COPYOVER,COPYOVER#2}, {enqueue#1}, {children#2}, {ENQUEUES,ENQUEUES#1}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {DEQUEUE#3,DEQUEUE#4,DEQUEUE#2,DEQUEUE,DEQUEUE#1}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {BREADTH#1,BREADTH#2,BREADTH#3,BREADTH#5,BREADTH}, {breadth#4}, {STARTBREADTH#2}, {STARTBREADTH#1} Previous analysis results are: children#1: runtime: O(1) [0], size: O(n^1) [1 + 2*z + z' + z''] ---------------------------------------- (55) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: empty after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (56) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z + z')) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z') :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z')) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z + z') :|: z' >= 0, z >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z + z') :|: z' >= 0, z >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z') :|: z' >= 0, z = 0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z, z') :|: z' >= 0, z >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#3(z5, z', z0', z1') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#2(z5, z') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z'' = 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + 0 :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z'' = 0, z1 = z2', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1 = v3, z0 = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z'' = 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z' + 0 + z1') + 0 :|: z'' >= 0, z' >= 0, z = 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z1 = z4, z0' >= 0, z0 = z3', z4 >= 0, z'' = 1 + z0' + z1', z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z' + 0 + z1) + 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z'' + z' + 0 + z5) + (1 + (1 + z'' + z0 + z5 + z1) + 0) :|: z1 >= 0, z0 >= 0, z5 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z' + z1) + (1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue(z, z') -{ 0 }-> 1 + (1 + z + z0') + z1' :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z' + z0) + z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueues#1(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {empty}, {enqueue}, {children#3}, {COPYOVER#1,COPYOVER,COPYOVER#2}, {enqueue#1}, {children#2}, {ENQUEUES,ENQUEUES#1}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {DEQUEUE#3,DEQUEUE#4,DEQUEUE#2,DEQUEUE,DEQUEUE#1}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {BREADTH#1,BREADTH#2,BREADTH#3,BREADTH#5,BREADTH}, {breadth#4}, {STARTBREADTH#2}, {STARTBREADTH#1} Previous analysis results are: children#1: runtime: O(1) [0], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: ?, size: O(1) [1] ---------------------------------------- (57) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: empty after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (58) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z + z')) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z') :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z')) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z + z') :|: z' >= 0, z >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z + z') :|: z' >= 0, z >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z') :|: z' >= 0, z = 0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z, z') :|: z' >= 0, z >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#3(z5, z', z0', z1') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#2(z5, z') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z'' = 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + 0 :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z'' = 0, z1 = z2', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1 = v3, z0 = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z'' = 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z' + 0 + z1') + 0 :|: z'' >= 0, z' >= 0, z = 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z1 = z4, z0' >= 0, z0 = z3', z4 >= 0, z'' = 1 + z0' + z1', z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z' + 0 + z1) + 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z'' + z' + 0 + z5) + (1 + (1 + z'' + z0 + z5 + z1) + 0) :|: z1 >= 0, z0 >= 0, z5 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z' + z1) + (1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue(z, z') -{ 0 }-> 1 + (1 + z + z0') + z1' :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z' + z0) + z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueues#1(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {enqueue}, {children#3}, {COPYOVER#1,COPYOVER,COPYOVER#2}, {enqueue#1}, {children#2}, {ENQUEUES,ENQUEUES#1}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {DEQUEUE#3,DEQUEUE#4,DEQUEUE#2,DEQUEUE,DEQUEUE#1}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {BREADTH#1,BREADTH#2,BREADTH#3,BREADTH#5,BREADTH}, {breadth#4}, {STARTBREADTH#2}, {STARTBREADTH#1} Previous analysis results are: children#1: runtime: O(1) [0], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [0], size: O(1) [1] ---------------------------------------- (59) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (60) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z + z')) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z') :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z')) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z + z') :|: z' >= 0, z >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z + z') :|: z' >= 0, z >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z') :|: z' >= 0, z = 0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z, z') :|: z' >= 0, z >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#3(z5, z', z0', z1') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#2(z5, z') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z'' = 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + 0 :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z'' = 0, z1 = z2', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1 = v3, z0 = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z'' = 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z' + 0 + z1') + 0 :|: z'' >= 0, z' >= 0, z = 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z1 = z4, z0' >= 0, z0 = z3', z4 >= 0, z'' = 1 + z0' + z1', z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z' + 0 + z1) + 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z'' + z' + 0 + z5) + (1 + (1 + z'' + z0 + z5 + z1) + 0) :|: z1 >= 0, z0 >= 0, z5 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z' + z1) + (1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue(z, z') -{ 0 }-> 1 + (1 + z + z0') + z1' :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z' + z0) + z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueues#1(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {enqueue}, {children#3}, {COPYOVER#1,COPYOVER,COPYOVER#2}, {enqueue#1}, {children#2}, {ENQUEUES,ENQUEUES#1}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {DEQUEUE#3,DEQUEUE#4,DEQUEUE#2,DEQUEUE,DEQUEUE#1}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {BREADTH#1,BREADTH#2,BREADTH#3,BREADTH#5,BREADTH}, {breadth#4}, {STARTBREADTH#2}, {STARTBREADTH#1} Previous analysis results are: children#1: runtime: O(1) [0], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [0], size: O(1) [1] ---------------------------------------- (61) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: enqueue after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z + z' ---------------------------------------- (62) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z + z')) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z') :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z')) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z + z') :|: z' >= 0, z >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z + z') :|: z' >= 0, z >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z') :|: z' >= 0, z = 0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z, z') :|: z' >= 0, z >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#3(z5, z', z0', z1') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#2(z5, z') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z'' = 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + 0 :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z'' = 0, z1 = z2', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1 = v3, z0 = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z'' = 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z' + 0 + z1') + 0 :|: z'' >= 0, z' >= 0, z = 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z1 = z4, z0' >= 0, z0 = z3', z4 >= 0, z'' = 1 + z0' + z1', z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z' + 0 + z1) + 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z'' + z' + 0 + z5) + (1 + (1 + z'' + z0 + z5 + z1) + 0) :|: z1 >= 0, z0 >= 0, z5 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z' + z1) + (1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue(z, z') -{ 0 }-> 1 + (1 + z + z0') + z1' :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z' + z0) + z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueues#1(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {enqueue}, {children#3}, {COPYOVER#1,COPYOVER,COPYOVER#2}, {enqueue#1}, {children#2}, {ENQUEUES,ENQUEUES#1}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {DEQUEUE#3,DEQUEUE#4,DEQUEUE#2,DEQUEUE,DEQUEUE#1}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {BREADTH#1,BREADTH#2,BREADTH#3,BREADTH#5,BREADTH}, {breadth#4}, {STARTBREADTH#2}, {STARTBREADTH#1} Previous analysis results are: children#1: runtime: O(1) [0], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [0], size: O(1) [1] enqueue: runtime: ?, size: O(n^1) [1 + z + z'] ---------------------------------------- (63) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: enqueue after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (64) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z + z')) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z') :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z')) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z + z') :|: z' >= 0, z >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z + z') :|: z' >= 0, z >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z') :|: z' >= 0, z = 0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z, z') :|: z' >= 0, z >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#3(z5, z', z0', z1') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#2(z5, z') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z'' = 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + 0 :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z'' = 0, z1 = z2', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1 = v3, z0 = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z'' = 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z' + 0 + z1') + 0 :|: z'' >= 0, z' >= 0, z = 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z1 = z4, z0' >= 0, z0 = z3', z4 >= 0, z'' = 1 + z0' + z1', z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z' + 0 + z1) + 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z'' + z' + 0 + z5) + (1 + (1 + z'' + z0 + z5 + z1) + 0) :|: z1 >= 0, z0 >= 0, z5 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z' + z1) + (1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue(z, z') -{ 0 }-> 1 + (1 + z + z0') + z1' :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z' + z0) + z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueues#1(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {children#3}, {COPYOVER#1,COPYOVER,COPYOVER#2}, {enqueue#1}, {children#2}, {ENQUEUES,ENQUEUES#1}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {DEQUEUE#3,DEQUEUE#4,DEQUEUE#2,DEQUEUE,DEQUEUE#1}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {BREADTH#1,BREADTH#2,BREADTH#3,BREADTH#5,BREADTH}, {breadth#4}, {STARTBREADTH#2}, {STARTBREADTH#1} Previous analysis results are: children#1: runtime: O(1) [0], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [0], size: O(1) [1] enqueue: runtime: O(1) [0], size: O(n^1) [1 + z + z'] ---------------------------------------- (65) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (66) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z + z')) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z') :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z')) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z + z') :|: z' >= 0, z >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z + z') :|: z' >= 0, z >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z') :|: z' >= 0, z = 0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z, z') :|: z' >= 0, z >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#3(z5, z', z0', z1') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#2(z5, z') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z'' = 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + 0 :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z'' = 0, z1 = z2', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1 = v3, z0 = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z'' = 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z' + 0 + z1') + 0 :|: z'' >= 0, z' >= 0, z = 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z1 = z4, z0' >= 0, z0 = z3', z4 >= 0, z'' = 1 + z0' + z1', z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z' + 0 + z1) + 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z'' + z' + 0 + z5) + (1 + (1 + z'' + z0 + z5 + z1) + 0) :|: z1 >= 0, z0 >= 0, z5 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z' + z1) + (1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue(z, z') -{ 0 }-> 1 + (1 + z + z0') + z1' :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z' + z0) + z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueues#1(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {children#3}, {COPYOVER#1,COPYOVER,COPYOVER#2}, {enqueue#1}, {children#2}, {ENQUEUES,ENQUEUES#1}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {DEQUEUE#3,DEQUEUE#4,DEQUEUE#2,DEQUEUE,DEQUEUE#1}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {BREADTH#1,BREADTH#2,BREADTH#3,BREADTH#5,BREADTH}, {breadth#4}, {STARTBREADTH#2}, {STARTBREADTH#1} Previous analysis results are: children#1: runtime: O(1) [0], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [0], size: O(1) [1] enqueue: runtime: O(1) [0], size: O(n^1) [1 + z + z'] ---------------------------------------- (67) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: children#3 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 3 + z + z' + 2*z'' + 2*z5 ---------------------------------------- (68) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z + z')) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z') :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z')) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z + z') :|: z' >= 0, z >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z + z') :|: z' >= 0, z >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z') :|: z' >= 0, z = 0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z, z') :|: z' >= 0, z >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#3(z5, z', z0', z1') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#2(z5, z') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z'' = 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + 0 :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z'' = 0, z1 = z2', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1 = v3, z0 = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z'' = 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z' + 0 + z1') + 0 :|: z'' >= 0, z' >= 0, z = 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z1 = z4, z0' >= 0, z0 = z3', z4 >= 0, z'' = 1 + z0' + z1', z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z' + 0 + z1) + 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z'' + z' + 0 + z5) + (1 + (1 + z'' + z0 + z5 + z1) + 0) :|: z1 >= 0, z0 >= 0, z5 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z' + z1) + (1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue(z, z') -{ 0 }-> 1 + (1 + z + z0') + z1' :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z' + z0) + z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueues#1(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {children#3}, {COPYOVER#1,COPYOVER,COPYOVER#2}, {enqueue#1}, {children#2}, {ENQUEUES,ENQUEUES#1}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {DEQUEUE#3,DEQUEUE#4,DEQUEUE#2,DEQUEUE,DEQUEUE#1}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {BREADTH#1,BREADTH#2,BREADTH#3,BREADTH#5,BREADTH}, {breadth#4}, {STARTBREADTH#2}, {STARTBREADTH#1} Previous analysis results are: children#1: runtime: O(1) [0], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [0], size: O(1) [1] enqueue: runtime: O(1) [0], size: O(n^1) [1 + z + z'] children#3: runtime: ?, size: O(n^1) [3 + z + z' + 2*z'' + 2*z5] ---------------------------------------- (69) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: children#3 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (70) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z + z')) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z') :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z')) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z + z') :|: z' >= 0, z >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z + z') :|: z' >= 0, z >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z') :|: z' >= 0, z = 0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z, z') :|: z' >= 0, z >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#3(z5, z', z0', z1') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#2(z5, z') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z'' = 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + 0 :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z'' = 0, z1 = z2', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1 = v3, z0 = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z'' = 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z' + 0 + z1') + 0 :|: z'' >= 0, z' >= 0, z = 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z1 = z4, z0' >= 0, z0 = z3', z4 >= 0, z'' = 1 + z0' + z1', z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z' + 0 + z1) + 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z'' + z' + 0 + z5) + (1 + (1 + z'' + z0 + z5 + z1) + 0) :|: z1 >= 0, z0 >= 0, z5 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z' + z1) + (1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue(z, z') -{ 0 }-> 1 + (1 + z + z0') + z1' :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z' + z0) + z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueues#1(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {COPYOVER#1,COPYOVER,COPYOVER#2}, {enqueue#1}, {children#2}, {ENQUEUES,ENQUEUES#1}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {DEQUEUE#3,DEQUEUE#4,DEQUEUE#2,DEQUEUE,DEQUEUE#1}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {BREADTH#1,BREADTH#2,BREADTH#3,BREADTH#5,BREADTH}, {breadth#4}, {STARTBREADTH#2}, {STARTBREADTH#1} Previous analysis results are: children#1: runtime: O(1) [0], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [0], size: O(1) [1] enqueue: runtime: O(1) [0], size: O(n^1) [1 + z + z'] children#3: runtime: O(1) [0], size: O(n^1) [3 + z + z' + 2*z'' + 2*z5] ---------------------------------------- (71) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (72) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z + z')) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z') :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z')) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z + z') :|: z' >= 0, z >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z + z') :|: z' >= 0, z >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z') :|: z' >= 0, z = 0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z, z') :|: z' >= 0, z >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + s :|: s >= 0, s <= z5 + z' + 2 * z0' + 2 * z1' + 3, z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#2(z5, z') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z'' = 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + 0 :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z'' = 0, z1 = z2', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1 = v3, z0 = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z'' = 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z' + 0 + z1') + 0 :|: z'' >= 0, z' >= 0, z = 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z1 = z4, z0' >= 0, z0 = z3', z4 >= 0, z'' = 1 + z0' + z1', z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z' + 0 + z1) + 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z'' + z' + 0 + z5) + (1 + (1 + z'' + z0 + z5 + z1) + 0) :|: z1 >= 0, z0 >= 0, z5 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z' + z1) + (1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue(z, z') -{ 0 }-> 1 + (1 + z + z0') + z1' :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z' + z0) + z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueues#1(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {COPYOVER#1,COPYOVER,COPYOVER#2}, {enqueue#1}, {children#2}, {ENQUEUES,ENQUEUES#1}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {DEQUEUE#3,DEQUEUE#4,DEQUEUE#2,DEQUEUE,DEQUEUE#1}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {BREADTH#1,BREADTH#2,BREADTH#3,BREADTH#5,BREADTH}, {breadth#4}, {STARTBREADTH#2}, {STARTBREADTH#1} Previous analysis results are: children#1: runtime: O(1) [0], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [0], size: O(1) [1] enqueue: runtime: O(1) [0], size: O(n^1) [1 + z + z'] children#3: runtime: O(1) [0], size: O(n^1) [3 + z + z' + 2*z'' + 2*z5] ---------------------------------------- (73) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: COPYOVER#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed SIZE bound using CoFloCo for: COPYOVER after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 Computed SIZE bound using CoFloCo for: COPYOVER#2 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (74) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z + z')) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z') :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z')) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z + z') :|: z' >= 0, z >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z + z') :|: z' >= 0, z >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z') :|: z' >= 0, z = 0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z, z') :|: z' >= 0, z >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + s :|: s >= 0, s <= z5 + z' + 2 * z0' + 2 * z1' + 3, z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#2(z5, z') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z'' = 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + 0 :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z'' = 0, z1 = z2', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1 = v3, z0 = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z'' = 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z' + 0 + z1') + 0 :|: z'' >= 0, z' >= 0, z = 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z1 = z4, z0' >= 0, z0 = z3', z4 >= 0, z'' = 1 + z0' + z1', z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z' + 0 + z1) + 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z'' + z' + 0 + z5) + (1 + (1 + z'' + z0 + z5 + z1) + 0) :|: z1 >= 0, z0 >= 0, z5 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z' + z1) + (1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue(z, z') -{ 0 }-> 1 + (1 + z + z0') + z1' :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z' + z0) + z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueues#1(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {COPYOVER#1,COPYOVER,COPYOVER#2}, {enqueue#1}, {children#2}, {ENQUEUES,ENQUEUES#1}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {DEQUEUE#3,DEQUEUE#4,DEQUEUE#2,DEQUEUE,DEQUEUE#1}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {BREADTH#1,BREADTH#2,BREADTH#3,BREADTH#5,BREADTH}, {breadth#4}, {STARTBREADTH#2}, {STARTBREADTH#1} Previous analysis results are: children#1: runtime: O(1) [0], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [0], size: O(1) [1] enqueue: runtime: O(1) [0], size: O(n^1) [1 + z + z'] children#3: runtime: O(1) [0], size: O(n^1) [3 + z + z' + 2*z'' + 2*z5] COPYOVER#1: runtime: ?, size: O(1) [0] COPYOVER: runtime: ?, size: O(1) [1] COPYOVER#2: runtime: ?, size: O(1) [2] ---------------------------------------- (75) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: COPYOVER#1 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (76) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue#1(1 + z + z')) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(0) + DEQUEUE(z, z') :|: z' >= 0, z >= 0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(children(z0', z1', z2', z3'), z') :|: z1 >= 0, z0' >= 0, z = 1 + (1 + z0' + z1' + z2' + z3') + z1, z3' >= 0, z1' >= 0, z2' >= 0, z' >= 0 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues#1(z1, z')) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(0) + ENQUEUES(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z + z') :|: z' >= 0, z >= 0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z + z') :|: z' >= 0, z >= 0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z') :|: z' >= 0, z = 0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover#1(1 + (1 + z0 + z1) + 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(0) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z, z') :|: z' >= 0, z >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 1 + 0 + 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue#1(z1', z0')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, 1 + z0 + z0 + z1 + z1 = z0', z1' >= 0, 0 = z1', z0' >= 0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 1 + 0 + 0 = v1 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, v0 >= 0, v1 >= 0, 1 + z0 + z0 + z1 + z1 = v0, 0 = v1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: z >= 0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + s :|: s >= 0, s <= z5 + z' + 2 * z0' + 2 * z1' + 3, z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + children#2(z5, z') :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0, z'' = 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z + z') + 0 :|: z' >= 0, z >= 0, z'' >= 0, z5 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z'' = 0, z1 = z2', z2' >= 0, z0 = z1' children#1(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1 = v3, z0 = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z'' = 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0 children#1(z, z', z'') -{ 0 }-> 1 + (1 + z0' + z' + 0 + z1') + 0 :|: z'' >= 0, z' >= 0, z = 0, z1' >= 0, z0' >= 0, z'' = 1 + z0' + z1' children#1(z, z', z'') -{ 0 }-> 1 + (1 + z3' + z' + 0 + z4) + (1 + (1 + z3' + z0' + z4 + z1') + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0, z1' >= 0, z1 = z4, z0' >= 0, z0 = z3', z4 >= 0, z'' = 1 + z0' + z1', z3' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z' + 0 + z1) + 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z'' >= 0, z' >= 0, z = 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z5 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z'' + z' + 0 + z5) + (1 + (1 + z'' + z0 + z5 + z1) + 0) :|: z1 >= 0, z0 >= 0, z5 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z' + z1) + (1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover#1(1 + (1 + z0 + z1) + 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> dequeue#4(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue(z, z') -{ 0 }-> 1 + (1 + z + z0') + z1' :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z' + z0) + z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueues#1(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v1 >= 0, z0 = v1 enqueues#1(z, z') -{ 0 }-> enqueues(z1, 1 + (1 + z2' + z0') + z1') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z1' >= 0, z0 = z2', z0' >= 0, z' = 1 + z0' + z1', z2' >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {COPYOVER#1,COPYOVER,COPYOVER#2}, {enqueue#1}, {children#2}, {ENQUEUES,ENQUEUES#1}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {DEQUEUE#3,DEQUEUE#4,DEQUEUE#2,DEQUEUE,DEQUEUE#1}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {BREADTH#1,BREADTH#2,BREADTH#3,BREADTH#5,BREADTH}, {breadth#4}, {STARTBREADTH#2}, {STARTBREADTH#1} Previous analysis results are: children#1: runtime: O(1) [0], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [0], size: O(1) [1] enqueue: runtime: O(1) [0], size: O(n^1) [1 + z + z'] children#3: runtime: O(1) [0], size: O(n^1) [3 + z + z' + 2*z'' + 2*z5] COPYOVER#1: runtime: INF, size: O(1) [0] COPYOVER: runtime: ?, size: O(1) [1] COPYOVER#2: runtime: ?, size: O(1) [2] ---------------------------------------- (77) 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: STARTBREADTH#2(v0) -> null_STARTBREADTH#2 [0] STARTBREADTH#1(v0) -> null_STARTBREADTH#1 [0] dequeue(v0, v1) -> null_dequeue [0] dequeue#1(v0) -> null_dequeue#1 [0] dequeue#2(v0, v1) -> null_dequeue#2 [0] dequeue#3(v0) -> null_dequeue#3 [0] dequeue#4(v0) -> null_dequeue#4 [0] copyover(v0, v1) -> null_copyover [0] copyover#1(v0) -> null_copyover#1 [0] copyover#2(v0, v1) -> null_copyover#2 [0] enqueues(v0, v1) -> null_enqueues [0] enqueues#1(v0, v1) -> null_enqueues#1 [0] enqueue(v0, v1) -> null_enqueue [0] enqueue#1(v0, v1) -> null_enqueue#1 [0] breadth#4(v0) -> null_breadth#4 [0] children(v0, v1, v2, v3) -> null_children [0] children#1(v0, v1, v2) -> null_children#1 [0] children#3(v0, v1, v2, v3) -> null_children#3 [0] children#2(v0, v1) -> null_children#2 [0] empty(v0) -> null_empty [0] BREADTH#1(v0) -> null_BREADTH#1 [0] BREADTH#3(v0, v1) -> null_BREADTH#3 [0] BREADTH#5(v0) -> null_BREADTH#5 [0] COPYOVER#1(v0) -> null_COPYOVER#1 [0] COPYOVER#2(v0, v1) -> null_COPYOVER#2 [0] DEQUEUE#1(v0) -> null_DEQUEUE#1 [0] DEQUEUE#2(v0, v1) -> null_DEQUEUE#2 [0] DEQUEUE#3(v0) -> null_DEQUEUE#3 [0] DEQUEUE#4(v0) -> null_DEQUEUE#4 [0] BREADTH#2(v0, v1) -> null_BREADTH#2 [0] ENQUEUES#1(v0, v1) -> null_ENQUEUES#1 [0] And the following fresh constants: null_STARTBREADTH#2, null_STARTBREADTH#1, null_dequeue, null_dequeue#1, null_dequeue#2, null_dequeue#3, null_dequeue#4, null_copyover, null_copyover#1, null_copyover#2, null_enqueues, null_enqueues#1, null_enqueue, null_enqueue#1, null_breadth#4, null_children, null_children#1, null_children#3, null_children#2, null_empty, null_BREADTH#1, null_BREADTH#3, null_BREADTH#5, null_COPYOVER#1, null_COPYOVER#2, null_DEQUEUE#1, null_DEQUEUE#2, null_DEQUEUE#3, null_DEQUEUE#4, null_BREADTH#2, null_ENQUEUES#1, const, const1, const2, const3 ---------------------------------------- (78) 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: BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) [1] BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) [1] BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) [1] BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) [1] COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) [1] COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) [1] COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) [1] DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) [1] DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) [1] DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) [1] DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) [1] DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) [1] ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) [1] BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) [1] ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) [1] STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) [0] STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) [0] dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) [0] dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) [0] dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) [0] dequeue#2(nil, z0) -> dequeue#3(z0) [0] dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) [0] dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) [0] dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) [0] copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) [0] copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) [0] copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) [0] copyover#2(nil, z0) -> tuple#2(nil, z0) [0] enqueues(z0, z1) -> enqueues#1(z0, z1) [0] enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) [0] enqueues#1(nil, z0) -> z0 [0] enqueue(z0, z1) -> enqueue#1(z1, z0) [0] enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) [0] breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) [0] children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) [0] children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) [0] children#1(nil, z0, z1) -> children#2(z1, z0) [0] children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) [0] children#3(nil, z0, z1, z2) -> nil [0] children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) [0] children#2(nil, z0) -> nil [0] empty(z0) -> tuple#2(nil, nil) [0] STARTBREADTH#2(v0) -> null_STARTBREADTH#2 [0] STARTBREADTH#1(v0) -> null_STARTBREADTH#1 [0] dequeue(v0, v1) -> null_dequeue [0] dequeue#1(v0) -> null_dequeue#1 [0] dequeue#2(v0, v1) -> null_dequeue#2 [0] dequeue#3(v0) -> null_dequeue#3 [0] dequeue#4(v0) -> null_dequeue#4 [0] copyover(v0, v1) -> null_copyover [0] copyover#1(v0) -> null_copyover#1 [0] copyover#2(v0, v1) -> null_copyover#2 [0] enqueues(v0, v1) -> null_enqueues [0] enqueues#1(v0, v1) -> null_enqueues#1 [0] enqueue(v0, v1) -> null_enqueue [0] enqueue#1(v0, v1) -> null_enqueue#1 [0] breadth#4(v0) -> null_breadth#4 [0] children(v0, v1, v2, v3) -> null_children [0] children#1(v0, v1, v2) -> null_children#1 [0] children#3(v0, v1, v2, v3) -> null_children#3 [0] children#2(v0, v1) -> null_children#2 [0] empty(v0) -> null_empty [0] BREADTH#1(v0) -> null_BREADTH#1 [0] BREADTH#3(v0, v1) -> null_BREADTH#3 [0] BREADTH#5(v0) -> null_BREADTH#5 [0] COPYOVER#1(v0) -> null_COPYOVER#1 [0] COPYOVER#2(v0, v1) -> null_COPYOVER#2 [0] DEQUEUE#1(v0) -> null_DEQUEUE#1 [0] DEQUEUE#2(v0, v1) -> null_DEQUEUE#2 [0] DEQUEUE#3(v0) -> null_DEQUEUE#3 [0] DEQUEUE#4(v0) -> null_DEQUEUE#4 [0] BREADTH#2(v0, v1) -> null_BREADTH#2 [0] ENQUEUES#1(v0, v1) -> null_ENQUEUES#1 [0] The TRS has the following type information: BREADTH :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> c c :: c1:null_BREADTH#1 -> c18 -> c BREADTH#1 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> c1:null_BREADTH#1 dequeue :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty DEQUEUE :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> c18 tuple#2 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty c1 :: c2:null_BREADTH#2 -> c1:null_BREADTH#1 BREADTH#2 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> c2:null_BREADTH#2 BREADTH#3 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> c4:null_BREADTH#3 c4 :: c6:null_BREADTH#5 -> c28 -> c4:null_BREADTH#3 BREADTH#5 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> c6:null_BREADTH#5 enqueues :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty ENQUEUES :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> c28 c6 :: c -> c6:null_BREADTH#5 COPYOVER :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> c14 c14 :: c15:null_COPYOVER#1 -> c14 COPYOVER#1 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> c15:null_COPYOVER#1 c15 :: c16:null_COPYOVER#2 -> c15:null_COPYOVER#1 COPYOVER#2 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> c16:null_COPYOVER#2 :: :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty c16 :: c14 -> c16:null_COPYOVER#2 c18 :: c19:null_DEQUEUE#1 -> c18 DEQUEUE#1 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> c19:null_DEQUEUE#1 c19 :: c21:null_DEQUEUE#2 -> c19:null_DEQUEUE#1 DEQUEUE#2 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> c21:null_DEQUEUE#2 nil :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty c21 :: c22:null_DEQUEUE#3 -> c21:null_DEQUEUE#2 DEQUEUE#3 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> c22:null_DEQUEUE#3 c22 :: c24:null_DEQUEUE#4 -> c14 -> c22:null_DEQUEUE#3 DEQUEUE#4 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> c24:null_DEQUEUE#4 copyover :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty c24 :: c18 -> c24:null_DEQUEUE#4 c28 :: c29:null_ENQUEUES#1 -> c28 ENQUEUES#1 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> c29:null_ENQUEUES#1 c2 :: c4:null_BREADTH#3 -> c2:null_BREADTH#2 breadth#4 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty c29 :: c28 -> c29:null_ENQUEUES#1 enqueue :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty STARTBREADTH#2 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> c34:null_STARTBREADTH#2 c34 :: c -> c34:null_STARTBREADTH#2 STARTBREADTH#1 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> c32:null_STARTBREADTH#1 c32 :: c34:null_STARTBREADTH#2 -> c32:null_STARTBREADTH#1 tuple#4 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty empty :: #unit -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty #unit :: #unit dequeue#1 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty dequeue#2 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty dequeue#3 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty dequeue#4 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty copyover#1 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty copyover#2 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty enqueues#1 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty enqueue#1 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty children :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty children#1 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty children#3 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty children#2 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty -> tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_STARTBREADTH#2 :: c34:null_STARTBREADTH#2 null_STARTBREADTH#1 :: c32:null_STARTBREADTH#1 null_dequeue :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_dequeue#1 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_dequeue#2 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_dequeue#3 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_dequeue#4 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_copyover :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_copyover#1 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_copyover#2 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_enqueues :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_enqueues#1 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_enqueue :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_enqueue#1 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_breadth#4 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_children :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_children#1 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_children#3 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_children#2 :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_empty :: tuple#2::::nil:tuple#4:null_dequeue:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_copyover:null_copyover#1:null_copyover#2:null_enqueues:null_enqueues#1:null_enqueue:null_enqueue#1:null_breadth#4:null_children:null_children#1:null_children#3:null_children#2:null_empty null_BREADTH#1 :: c1:null_BREADTH#1 null_BREADTH#3 :: c4:null_BREADTH#3 null_BREADTH#5 :: c6:null_BREADTH#5 null_COPYOVER#1 :: c15:null_COPYOVER#1 null_COPYOVER#2 :: c16:null_COPYOVER#2 null_DEQUEUE#1 :: c19:null_DEQUEUE#1 null_DEQUEUE#2 :: c21:null_DEQUEUE#2 null_DEQUEUE#3 :: c22:null_DEQUEUE#3 null_DEQUEUE#4 :: c24:null_DEQUEUE#4 null_BREADTH#2 :: c2:null_BREADTH#2 null_ENQUEUES#1 :: c29:null_ENQUEUES#1 const :: c const1 :: c18 const2 :: c28 const3 :: c14 Rewrite Strategy: INNERMOST ---------------------------------------- (79) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: nil => 0 #unit => 0 null_STARTBREADTH#2 => 0 null_STARTBREADTH#1 => 0 null_dequeue => 0 null_dequeue#1 => 0 null_dequeue#2 => 0 null_dequeue#3 => 0 null_dequeue#4 => 0 null_copyover => 0 null_copyover#1 => 0 null_copyover#2 => 0 null_enqueues => 0 null_enqueues#1 => 0 null_enqueue => 0 null_enqueue#1 => 0 null_breadth#4 => 0 null_children => 0 null_children#1 => 0 null_children#3 => 0 null_children#2 => 0 null_empty => 0 null_BREADTH#1 => 0 null_BREADTH#3 => 0 null_BREADTH#5 => 0 null_COPYOVER#1 => 0 null_COPYOVER#2 => 0 null_DEQUEUE#1 => 0 null_DEQUEUE#2 => 0 null_DEQUEUE#3 => 0 null_DEQUEUE#4 => 0 null_BREADTH#2 => 0 null_ENQUEUES#1 => 0 const => 0 const1 => 0 const2 => 0 const3 => 0 ---------------------------------------- (80) Obligation: Complexity RNTS consisting of the following rules: BREADTH(z, z') -{ 1 }-> 1 + BREADTH#1(dequeue(z0, z1)) + DEQUEUE(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 BREADTH#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 BREADTH#1(z) -{ 1 }-> 1 + BREADTH#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 BREADTH#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 BREADTH#2(z, z') -{ 1 }-> 1 + BREADTH#3(breadth#4(z0), z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 BREADTH#3(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 BREADTH#3(z, z') -{ 1 }-> 1 + BREADTH#5(enqueues(z1, z2)) + ENQUEUES(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 BREADTH#5(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 BREADTH#5(z) -{ 1 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER(z, z') -{ 1 }-> 1 + COPYOVER#1(1 + z0 + z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 COPYOVER#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 COPYOVER#1(z) -{ 1 }-> 1 + COPYOVER#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 COPYOVER#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 COPYOVER#2(z, z') -{ 1 }-> 1 + COPYOVER(z1, 1 + z0 + z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 DEQUEUE(z, z') -{ 1 }-> 1 + DEQUEUE#1(1 + z0 + z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 DEQUEUE#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 DEQUEUE#1(z) -{ 1 }-> 1 + DEQUEUE#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 DEQUEUE#2(z, z') -{ 1 }-> 1 + DEQUEUE#3(z0) :|: z0 >= 0, z = 0, z' = z0 DEQUEUE#3(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 DEQUEUE#3(z) -{ 1 }-> 1 + DEQUEUE#4(copyover(1 + z0 + z1, 0)) + COPYOVER(1 + z0 + z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 DEQUEUE#4(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 DEQUEUE#4(z) -{ 1 }-> 1 + DEQUEUE(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ENQUEUES(z, z') -{ 1 }-> 1 + ENQUEUES#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 ENQUEUES#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 ENQUEUES#1(z, z') -{ 1 }-> 1 + ENQUEUES(z1, enqueue(z0, z2)) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 STARTBREADTH#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 STARTBREADTH#1(z) -{ 0 }-> 1 + STARTBREADTH#2(enqueue(1 + z0 + z0 + z1 + z1, empty(0))) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 STARTBREADTH#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 STARTBREADTH#2(z) -{ 0 }-> 1 + BREADTH(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 breadth#4(z) -{ 0 }-> children(z0, z1, z2, z3) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + z2 + z3, z2 >= 0, z3 >= 0 breadth#4(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 children(z, z', z'', z5) -{ 0 }-> 0 :|: z5 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 children(z, z', z'', z5) -{ 0 }-> 1 + (1 + z0 + z1) + children#1(z2, z1, z3) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z5 = z3, z2 >= 0, z3 >= 0 children#1(z, z', z'') -{ 0 }-> children#3(z3, z2, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 children#1(z, z', z'') -{ 0 }-> children#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 0, z' = z0, z'' = z1 children#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 children#2(z, z') -{ 0 }-> 0 :|: z0 >= 0, z = 0, z' = z0 children#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 children#2(z, z') -{ 0 }-> 1 + (1 + z0 + z2 + 0 + z1) + 0 :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 0, z5 = z2, z' = z0, z2 >= 0, z'' = z1 children#3(z, z', z'', z5) -{ 0 }-> 0 :|: z5 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 children#3(z, z', z'', z5) -{ 0 }-> 1 + (1 + z3 + z2 + 0 + z4) + (1 + (1 + z3 + z0 + z4 + z1) + 0) :|: z1 >= 0, z5 = z4, z' = z2, z0 >= 0, z'' = z3, z4 >= 0, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 copyover(z, z') -{ 0 }-> copyover#1(1 + z0 + z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 copyover(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 copyover#1(z) -{ 0 }-> copyover#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 copyover#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 copyover#2(z, z') -{ 0 }-> copyover(z1, 1 + z0 + z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 copyover#2(z, z') -{ 0 }-> 1 + 0 + z0 :|: z0 >= 0, z = 0, z' = z0 dequeue(z, z') -{ 0 }-> dequeue#1(1 + z0 + z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 dequeue(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 dequeue#1(z) -{ 0 }-> dequeue#2(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 dequeue#2(z, z') -{ 0 }-> dequeue#3(z0) :|: z0 >= 0, z = 0, z' = z0 dequeue#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 dequeue#2(z, z') -{ 0 }-> 1 + (1 + z2 + z1) + (1 + z0 + 0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 dequeue#3(z) -{ 0 }-> dequeue#4(copyover(1 + z0 + z1, 0)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#3(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 dequeue#3(z) -{ 0 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 0 }-> dequeue(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 dequeue#4(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 empty(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 empty(z) -{ 0 }-> 1 + 0 + 0 :|: z = z0, z0 >= 0 enqueue(z, z') -{ 0 }-> enqueue#1(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 enqueue(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueue#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueue#1(z, z') -{ 0 }-> 1 + (1 + z2 + z0) + z1 :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 enqueues(z, z') -{ 0 }-> enqueues#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 enqueues(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueues#1(z, z') -{ 0 }-> z0 :|: z0 >= 0, z = 0, z' = z0 enqueues#1(z, z') -{ 0 }-> enqueues(z1, enqueue(z0, z2)) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (81) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BREADTH(z0, z1) -> c(BREADTH#1(dequeue(z0, z1)), DEQUEUE(z0, z1)) by BREADTH(z0, z1) -> c(BREADTH#1(dequeue#1(tuple#2(z0, z1))), DEQUEUE(z0, z1)) ---------------------------------------- (82) Obligation: Complexity Dependency Tuples Problem Rules: dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil empty(z0) -> tuple#2(nil, nil) Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#1(tuple#2(z0, z1))), DEQUEUE(z0, z1)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#1(tuple#2(z0, z1))), DEQUEUE(z0, z1)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) Defined Rule Symbols: dequeue_2, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, enqueues_2, enqueues#1_2, enqueue_2, enqueue#1_2, breadth#4_1, children_4, children#1_3, children#3_4, children#2_2, empty_1 Defined Pair Symbols: BREADTH#1_1, BREADTH#3_2, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#3_1, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, BREADTH#2_2, ENQUEUES#1_2, STARTBREADTH#1_1, BREADTH_2 Compound Symbols: c1_1, c4_2, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c22_2, c24_1, c28_1, c34_1, c2_1, c29_1, c32_1, c_2 ---------------------------------------- (83) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BREADTH#3(tuple#2(z0, z1), z2) -> c4(BREADTH#5(enqueues(z1, z2)), ENQUEUES(z1, z2)) by BREADTH#3(tuple#2(x0, z0), z1) -> c4(BREADTH#5(enqueues#1(z0, z1)), ENQUEUES(z0, z1)) ---------------------------------------- (84) Obligation: Complexity Dependency Tuples Problem Rules: dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil empty(z0) -> tuple#2(nil, nil) Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#1(tuple#2(z0, z1))), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, z0), z1) -> c4(BREADTH#5(enqueues#1(z0, z1)), ENQUEUES(z0, z1)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#1(tuple#2(z0, z1))), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, z0), z1) -> c4(BREADTH#5(enqueues#1(z0, z1)), ENQUEUES(z0, z1)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) Defined Rule Symbols: dequeue_2, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, enqueues_2, enqueues#1_2, enqueue_2, enqueue#1_2, breadth#4_1, children_4, children#1_3, children#3_4, children#2_2, empty_1 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#3_1, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, BREADTH#2_2, ENQUEUES#1_2, STARTBREADTH#1_1, BREADTH_2, BREADTH#3_2 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c22_2, c24_1, c28_1, c34_1, c2_1, c29_1, c32_1, c_2, c4_2 ---------------------------------------- (85) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(::(z0, z1), nil)), COPYOVER(::(z0, z1), nil)) by DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) ---------------------------------------- (86) Obligation: Complexity Dependency Tuples Problem Rules: dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil empty(z0) -> tuple#2(nil, nil) Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#1(tuple#2(z0, z1))), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, z0), z1) -> c4(BREADTH#5(enqueues#1(z0, z1)), ENQUEUES(z0, z1)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#1(tuple#2(z0, z1))), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, z0), z1) -> c4(BREADTH#5(enqueues#1(z0, z1)), ENQUEUES(z0, z1)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) Defined Rule Symbols: dequeue_2, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, enqueues_2, enqueues#1_2, enqueue_2, enqueue#1_2, breadth#4_1, children_4, children#1_3, children#3_4, children#2_2, empty_1 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, BREADTH#2_2, ENQUEUES#1_2, STARTBREADTH#1_1, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c2_1, c29_1, c32_1, c_2, c4_2, c22_2 ---------------------------------------- (87) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BREADTH#2(::(z0, z1), z2) -> c2(BREADTH#3(breadth#4(z0), z2)) by BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) ---------------------------------------- (88) Obligation: Complexity Dependency Tuples Problem Rules: dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil empty(z0) -> tuple#2(nil, nil) Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#1(tuple#2(z0, z1))), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, z0), z1) -> c4(BREADTH#5(enqueues#1(z0, z1)), ENQUEUES(z0, z1)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#1(tuple#2(z0, z1))), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, z0), z1) -> c4(BREADTH#5(enqueues#1(z0, z1)), ENQUEUES(z0, z1)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) Defined Rule Symbols: dequeue_2, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, enqueues_2, enqueues#1_2, enqueue_2, enqueue#1_2, breadth#4_1, children_4, children#1_3, children#3_4, children#2_2, empty_1 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, ENQUEUES#1_2, STARTBREADTH#1_1, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, BREADTH#2_2 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c29_1, c32_1, c_2, c4_2, c22_2, c2_1 ---------------------------------------- (89) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: breadth#4(tuple#4(z0, z1, z2, z3)) -> children(z0, z1, z2, z3) ---------------------------------------- (90) Obligation: Complexity Dependency Tuples Problem Rules: enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) empty(z0) -> tuple#2(nil, nil) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 enqueues(z0, z1) -> enqueues#1(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#1(tuple#2(z0, z1))), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, z0), z1) -> c4(BREADTH#5(enqueues#1(z0, z1)), ENQUEUES(z0, z1)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#1(tuple#2(z0, z1))), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, z0), z1) -> c4(BREADTH#5(enqueues#1(z0, z1)), ENQUEUES(z0, z1)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) Defined Rule Symbols: enqueue_2, enqueue#1_2, empty_1, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, enqueues#1_2, enqueues_2, children_4, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, ENQUEUES#1_2, STARTBREADTH#1_1, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, BREADTH#2_2 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c29_1, c32_1, c_2, c4_2, c22_2, c2_1 ---------------------------------------- (91) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace ENQUEUES#1(::(z0, z1), z2) -> c29(ENQUEUES(z1, enqueue(z0, z2))) by ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) ---------------------------------------- (92) Obligation: Complexity Dependency Tuples Problem Rules: enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) empty(z0) -> tuple#2(nil, nil) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 enqueues(z0, z1) -> enqueues#1(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#1(tuple#2(z0, z1))), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, z0), z1) -> c4(BREADTH#5(enqueues#1(z0, z1)), ENQUEUES(z0, z1)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#1(tuple#2(z0, z1))), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, z0), z1) -> c4(BREADTH#5(enqueues#1(z0, z1)), ENQUEUES(z0, z1)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) Defined Rule Symbols: enqueue_2, enqueue#1_2, empty_1, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, enqueues#1_2, enqueues_2, children_4, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, STARTBREADTH#1_1, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, BREADTH#2_2, ENQUEUES#1_2 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c32_1, c_2, c4_2, c22_2, c2_1, c29_1 ---------------------------------------- (93) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) by STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(empty(#unit), tuple#4(x0, x0, x1, x1)))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(x0, x0, x1, x1), tuple#2(nil, nil)))) ---------------------------------------- (94) Obligation: Complexity Dependency Tuples Problem Rules: enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) empty(z0) -> tuple#2(nil, nil) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 enqueues(z0, z1) -> enqueues#1(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#1(tuple#2(z0, z1))), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, z0), z1) -> c4(BREADTH#5(enqueues#1(z0, z1)), ENQUEUES(z0, z1)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(empty(#unit), tuple#4(x0, x0, x1, x1)))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(x0, x0, x1, x1), tuple#2(nil, nil)))) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#1(tuple#2(z0, z1))), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, z0), z1) -> c4(BREADTH#5(enqueues#1(z0, z1)), ENQUEUES(z0, z1)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) Defined Rule Symbols: enqueue_2, enqueue#1_2, empty_1, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, enqueues#1_2, enqueues_2, children_4, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, BREADTH#2_2, ENQUEUES#1_2, STARTBREADTH#1_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c_2, c4_2, c22_2, c2_1, c29_1, c32_1 ---------------------------------------- (95) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BREADTH(z0, z1) -> c(BREADTH#1(dequeue#1(tuple#2(z0, z1))), DEQUEUE(z0, z1)) by BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) ---------------------------------------- (96) Obligation: Complexity Dependency Tuples Problem Rules: enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) empty(z0) -> tuple#2(nil, nil) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 enqueues(z0, z1) -> enqueues#1(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#3(tuple#2(x0, z0), z1) -> c4(BREADTH#5(enqueues#1(z0, z1)), ENQUEUES(z0, z1)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(empty(#unit), tuple#4(x0, x0, x1, x1)))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(x0, x0, x1, x1), tuple#2(nil, nil)))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) BREADTH#3(tuple#2(x0, z0), z1) -> c4(BREADTH#5(enqueues#1(z0, z1)), ENQUEUES(z0, z1)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) Defined Rule Symbols: enqueue_2, enqueue#1_2, empty_1, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, enqueues#1_2, enqueues_2, children_4, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, BREADTH#3_2, DEQUEUE#3_1, BREADTH#2_2, ENQUEUES#1_2, STARTBREADTH#1_1, BREADTH_2 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c4_2, c22_2, c2_1, c29_1, c32_1, c_2 ---------------------------------------- (97) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BREADTH#3(tuple#2(x0, z0), z1) -> c4(BREADTH#5(enqueues#1(z0, z1)), ENQUEUES(z0, z1)) by BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) ---------------------------------------- (98) Obligation: Complexity Dependency Tuples Problem Rules: enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) empty(z0) -> tuple#2(nil, nil) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 enqueues(z0, z1) -> enqueues#1(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(empty(#unit), tuple#4(x0, x0, x1, x1)))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(x0, x0, x1, x1), tuple#2(nil, nil)))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) Defined Rule Symbols: enqueue_2, enqueue#1_2, empty_1, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, enqueues#1_2, enqueues_2, children_4, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, DEQUEUE#3_1, BREADTH#2_2, ENQUEUES#1_2, STARTBREADTH#1_1, BREADTH_2, BREADTH#3_2 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c22_2, c2_1, c29_1, c32_1, c_2, c4_2, c4_1 ---------------------------------------- (99) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) We considered the (Usable) Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) enqueue(z0, z1) -> enqueue#1(z1, z0) And the Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(empty(#unit), tuple#4(x0, x0, x1, x1)))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(x0, x0, x1, x1), tuple#2(nil, nil)))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) The order we found is given by the following interpretation: Polynomial interpretation : POL(#unit) = [1] POL(::(x_1, x_2)) = 0 POL(BREADTH(x_1, x_2)) = [1] POL(BREADTH#1(x_1)) = [1] POL(BREADTH#2(x_1, x_2)) = [1] POL(BREADTH#3(x_1, x_2)) = x_1 POL(BREADTH#5(x_1)) = [1] POL(COPYOVER(x_1, x_2)) = 0 POL(COPYOVER#1(x_1)) = 0 POL(COPYOVER#2(x_1, x_2)) = 0 POL(DEQUEUE(x_1, x_2)) = 0 POL(DEQUEUE#1(x_1)) = 0 POL(DEQUEUE#2(x_1, x_2)) = 0 POL(DEQUEUE#3(x_1)) = 0 POL(DEQUEUE#4(x_1)) = 0 POL(ENQUEUES(x_1, x_2)) = 0 POL(ENQUEUES#1(x_1, x_2)) = 0 POL(STARTBREADTH#1(x_1)) = [1] + x_1 POL(STARTBREADTH#2(x_1)) = x_1 POL(c(x_1, x_2)) = x_1 + x_2 POL(c1(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c15(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c18(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c24(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c32(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c4(x_1, x_2)) = x_1 + x_2 POL(c6(x_1)) = x_1 POL(children(x_1, x_2, x_3, x_4)) = [1] POL(children#1(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(children#2(x_1, x_2)) = [1] + x_1 + x_2 POL(children#3(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_2 + x_3 + x_4 POL(copyover(x_1, x_2)) = [1] + x_1 + x_2 POL(copyover#1(x_1)) = [1] POL(copyover#2(x_1, x_2)) = [1] + x_1 + x_2 POL(dequeue(x_1, x_2)) = [1] + x_1 + x_2 POL(dequeue#1(x_1)) = [1] + x_1 POL(dequeue#2(x_1, x_2)) = [1] + x_1 + x_2 POL(dequeue#3(x_1)) = [1] + x_1 POL(dequeue#4(x_1)) = [1] + x_1 POL(empty(x_1)) = [1] + x_1 POL(enqueue(x_1, x_2)) = [1] POL(enqueue#1(x_1, x_2)) = [1] POL(enqueues(x_1, x_2)) = [1] + x_1 + x_2 POL(enqueues#1(x_1, x_2)) = [1] + x_1 + x_2 POL(nil) = 0 POL(tuple#2(x_1, x_2)) = [1] POL(tuple#4(x_1, x_2, x_3, x_4)) = x_1 + x_2 ---------------------------------------- (100) Obligation: Complexity Dependency Tuples Problem Rules: enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) empty(z0) -> tuple#2(nil, nil) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 enqueues(z0, z1) -> enqueues#1(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(empty(#unit), tuple#4(x0, x0, x1, x1)))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(x0, x0, x1, x1), tuple#2(nil, nil)))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) Defined Rule Symbols: enqueue_2, enqueue#1_2, empty_1, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, enqueues#1_2, enqueues_2, children_4, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, DEQUEUE#3_1, BREADTH#2_2, ENQUEUES#1_2, STARTBREADTH#1_1, BREADTH_2, BREADTH#3_2 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c22_2, c2_1, c29_1, c32_1, c_2, c4_2, c4_1 ---------------------------------------- (101) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#1(tuple#2(::(x0, x1), nil))), COPYOVER(::(x0, x1), nil)) by DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) ---------------------------------------- (102) Obligation: Complexity Dependency Tuples Problem Rules: enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) empty(z0) -> tuple#2(nil, nil) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 enqueues(z0, z1) -> enqueues#1(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(empty(#unit), tuple#4(x0, x0, x1, x1)))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(x0, x0, x1, x1), tuple#2(nil, nil)))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) Defined Rule Symbols: enqueue_2, enqueue#1_2, empty_1, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, enqueues#1_2, enqueues_2, children_4, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, BREADTH#2_2, ENQUEUES#1_2, STARTBREADTH#1_1, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c2_1, c29_1, c32_1, c_2, c4_2, c4_1, c22_2 ---------------------------------------- (103) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BREADTH#2(::(tuple#4(z0, z1, z2, z3), x1), x2) -> c2(BREADTH#3(children(z0, z1, z2, z3), x2)) by BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) ---------------------------------------- (104) Obligation: Complexity Dependency Tuples Problem Rules: enqueue(z0, z1) -> enqueue#1(z1, z0) enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) empty(z0) -> tuple#2(nil, nil) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 enqueues(z0, z1) -> enqueues#1(z0, z1) children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(empty(#unit), tuple#4(x0, x0, x1, x1)))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(x0, x0, x1, x1), tuple#2(nil, nil)))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) Defined Rule Symbols: enqueue_2, enqueue#1_2, empty_1, dequeue#1_1, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, enqueues#1_2, enqueues_2, children_4, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, ENQUEUES#1_2, STARTBREADTH#1_1, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, BREADTH#2_2 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c29_1, c32_1, c_2, c4_2, c4_1, c22_2, c2_1 ---------------------------------------- (105) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: children(z0, z1, z2, z3) -> tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)) ---------------------------------------- (106) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) empty(z0) -> tuple#2(nil, nil) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(empty(#unit), tuple#4(x0, x0, x1, x1)))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(x0, x0, x1, x1), tuple#2(nil, nil)))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) Defined Rule Symbols: enqueue#1_2, empty_1, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, ENQUEUES#1_2, STARTBREADTH#1_1, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, BREADTH#2_2 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c29_1, c32_1, c_2, c4_2, c4_1, c22_2, c2_1 ---------------------------------------- (107) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(empty(#unit), tuple#4(x0, x0, x1, x1)))) by STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(tuple#2(nil, nil), tuple#4(x0, x0, x1, x1)))) ---------------------------------------- (108) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) empty(z0) -> tuple#2(nil, nil) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(x0, x0, x1, x1), tuple#2(nil, nil)))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(tuple#2(nil, nil), tuple#4(x0, x0, x1, x1)))) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) Defined Rule Symbols: enqueue#1_2, empty_1, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, ENQUEUES#1_2, STARTBREADTH#1_1, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, BREADTH#2_2 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c29_1, c32_1, c_2, c4_2, c4_1, c22_2, c2_1 ---------------------------------------- (109) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: empty(z0) -> tuple#2(nil, nil) ---------------------------------------- (110) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(x0, x0, x1, x1), tuple#2(nil, nil)))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(tuple#2(nil, nil), tuple#4(x0, x0, x1, x1)))) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, ENQUEUES#1_2, STARTBREADTH#1_1, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, BREADTH#2_2 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c29_1, c32_1, c_2, c4_2, c4_1, c22_2, c2_1 ---------------------------------------- (111) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(x0, x0, x1, x1), tuple#2(nil, nil)))) by STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(tuple#2(nil, nil), tuple#4(x0, x0, x1, x1)))) ---------------------------------------- (112) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(tuple#2(nil, nil), tuple#4(x0, x0, x1, x1)))) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, ENQUEUES#1_2, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, BREADTH#2_2, STARTBREADTH#1_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c29_1, c_2, c4_2, c4_1, c22_2, c2_1, c32_1 ---------------------------------------- (113) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BREADTH(z0, z1) -> c(BREADTH#1(dequeue#2(z1, z0)), DEQUEUE(z0, z1)) by BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) ---------------------------------------- (114) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(tuple#2(nil, nil), tuple#4(x0, x0, x1, x1)))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, ENQUEUES#1_2, BREADTH#3_2, DEQUEUE#3_1, BREADTH#2_2, STARTBREADTH#1_1, BREADTH_2 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c29_1, c4_2, c4_1, c22_2, c2_1, c32_1, c_2, c_1 ---------------------------------------- (115) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) We considered the (Usable) Rules: dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) And the Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(tuple#2(nil, nil), tuple#4(x0, x0, x1, x1)))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) The order we found is given by the following interpretation: Polynomial interpretation : POL(::(x_1, x_2)) = 0 POL(BREADTH(x_1, x_2)) = [1] POL(BREADTH#1(x_1)) = x_1 POL(BREADTH#2(x_1, x_2)) = [1] POL(BREADTH#3(x_1, x_2)) = [1] POL(BREADTH#5(x_1)) = [1] POL(COPYOVER(x_1, x_2)) = 0 POL(COPYOVER#1(x_1)) = 0 POL(COPYOVER#2(x_1, x_2)) = 0 POL(DEQUEUE(x_1, x_2)) = 0 POL(DEQUEUE#1(x_1)) = 0 POL(DEQUEUE#2(x_1, x_2)) = 0 POL(DEQUEUE#3(x_1)) = 0 POL(DEQUEUE#4(x_1)) = 0 POL(ENQUEUES(x_1, x_2)) = 0 POL(ENQUEUES#1(x_1, x_2)) = 0 POL(STARTBREADTH#1(x_1)) = [3] POL(STARTBREADTH#2(x_1)) = [2] POL(c(x_1)) = x_1 POL(c(x_1, x_2)) = x_1 + x_2 POL(c1(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c15(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c18(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c24(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c32(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c4(x_1, x_2)) = x_1 + x_2 POL(c6(x_1)) = x_1 POL(children#1(x_1, x_2, x_3)) = [3] + [3]x_1 + [3]x_2 + [3]x_3 POL(children#2(x_1, x_2)) = [3] + [3]x_1 + [3]x_2 POL(children#3(x_1, x_2, x_3, x_4)) = [3] + [3]x_1 + [3]x_2 + [3]x_3 + [3]x_4 POL(copyover(x_1, x_2)) = [3] + [3]x_1 + [3]x_2 POL(copyover#1(x_1)) = [3] + [3]x_1 POL(copyover#2(x_1, x_2)) = [3] + [3]x_1 + [3]x_2 POL(dequeue(x_1, x_2)) = [1] POL(dequeue#1(x_1)) = [1] POL(dequeue#2(x_1, x_2)) = [1] POL(dequeue#3(x_1)) = [1] POL(dequeue#4(x_1)) = [1] POL(enqueue(x_1, x_2)) = 0 POL(enqueue#1(x_1, x_2)) = [2] POL(enqueues(x_1, x_2)) = [3] + [3]x_1 POL(enqueues#1(x_1, x_2)) = [3] + [3]x_1 + [3]x_2 POL(nil) = 0 POL(tuple#2(x_1, x_2)) = [1] POL(tuple#4(x_1, x_2, x_3, x_4)) = 0 ---------------------------------------- (116) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(tuple#2(nil, nil), tuple#4(x0, x0, x1, x1)))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, ENQUEUES#1_2, BREADTH#3_2, DEQUEUE#3_1, BREADTH#2_2, STARTBREADTH#1_1, BREADTH_2 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c29_1, c4_2, c4_1, c22_2, c2_1, c32_1, c_2, c_1 ---------------------------------------- (117) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BREADTH#3(tuple#2(x0, ::(z0, z1)), z2) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, z2))), ENQUEUES(::(z0, z1), z2)) by BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) ---------------------------------------- (118) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(tuple#2(nil, nil), tuple#4(x0, x0, x1, x1)))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, ENQUEUES#1_2, BREADTH#3_2, DEQUEUE#3_1, BREADTH#2_2, STARTBREADTH#1_1, BREADTH_2 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c29_1, c4_2, c4_1, c22_2, c2_1, c32_1, c_2, c_1 ---------------------------------------- (119) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) We considered the (Usable) Rules:none And the Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(tuple#2(nil, nil), tuple#4(x0, x0, x1, x1)))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) The order we found is given by the following interpretation: Polynomial interpretation : POL(::(x_1, x_2)) = 0 POL(BREADTH(x_1, x_2)) = [1] POL(BREADTH#1(x_1)) = [1] POL(BREADTH#2(x_1, x_2)) = [1] POL(BREADTH#3(x_1, x_2)) = [1] POL(BREADTH#5(x_1)) = [1] POL(COPYOVER(x_1, x_2)) = 0 POL(COPYOVER#1(x_1)) = x_1 POL(COPYOVER#2(x_1, x_2)) = 0 POL(DEQUEUE(x_1, x_2)) = 0 POL(DEQUEUE#1(x_1)) = 0 POL(DEQUEUE#2(x_1, x_2)) = 0 POL(DEQUEUE#3(x_1)) = 0 POL(DEQUEUE#4(x_1)) = 0 POL(ENQUEUES(x_1, x_2)) = 0 POL(ENQUEUES#1(x_1, x_2)) = 0 POL(STARTBREADTH#1(x_1)) = [1] + x_1 POL(STARTBREADTH#2(x_1)) = [1] POL(c(x_1)) = x_1 POL(c(x_1, x_2)) = x_1 + x_2 POL(c1(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c15(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c18(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c24(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c32(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c4(x_1, x_2)) = x_1 + x_2 POL(c6(x_1)) = x_1 POL(children#1(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(children#2(x_1, x_2)) = [1] + x_1 + x_2 POL(children#3(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_2 + x_3 + x_4 POL(copyover(x_1, x_2)) = [1] + x_1 + x_2 POL(copyover#1(x_1)) = [1] + x_1 POL(copyover#2(x_1, x_2)) = [1] + x_1 + x_2 POL(dequeue(x_1, x_2)) = [1] + x_1 + x_2 POL(dequeue#1(x_1)) = [1] + x_1 POL(dequeue#2(x_1, x_2)) = [1] + x_1 + x_2 POL(dequeue#3(x_1)) = [1] + x_1 POL(dequeue#4(x_1)) = [1] + x_1 POL(enqueue(x_1, x_2)) = [1] + x_1 + x_2 POL(enqueue#1(x_1, x_2)) = x_1 POL(enqueues(x_1, x_2)) = [1] + x_1 POL(enqueues#1(x_1, x_2)) = [1] + x_1 POL(nil) = 0 POL(tuple#2(x_1, x_2)) = 0 POL(tuple#4(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_4 ---------------------------------------- (120) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(tuple#2(nil, nil), tuple#4(x0, x0, x1, x1)))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, ENQUEUES#1_2, BREADTH#3_2, DEQUEUE#3_1, BREADTH#2_2, STARTBREADTH#1_1, BREADTH_2 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c29_1, c4_2, c4_1, c22_2, c2_1, c32_1, c_2, c_1 ---------------------------------------- (121) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace DEQUEUE#3(::(x0, x1)) -> c22(DEQUEUE#4(copyover#2(::(x0, x1), nil)), COPYOVER(::(x0, x1), nil)) by DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) ---------------------------------------- (122) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(tuple#2(nil, nil), tuple#4(x0, x0, x1, x1)))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, STARTBREADTH#1_1, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c29_1, c4_2, c4_1, c2_1, c32_1, c_2, c_1, c22_2, c22_1 ---------------------------------------- (123) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(tuple#2(nil, nil), tuple#4(x0, x0, x1, x1)))) by STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(tuple#2(::(tuple#4(x0, x0, x1, x1), nil), nil))) ---------------------------------------- (124) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(tuple#2(nil, nil), tuple#4(x0, x0, x1, x1)))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(tuple#2(::(tuple#4(x0, x0, x1, x1), nil), nil))) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) K tuples: STARTBREADTH#1(::(z0, z1)) -> c32(STARTBREADTH#2(enqueue(tuple#4(z0, z0, z1, z1), empty(#unit)))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, STARTBREADTH#1_1, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c29_1, c4_2, c4_1, c2_1, c32_1, c_2, c_1, c22_2, c22_1 ---------------------------------------- (125) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(tuple#2(::(tuple#4(x0, x0, x1, x1), nil), nil))) ---------------------------------------- (126) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(tuple#2(nil, nil), tuple#4(x0, x0, x1, x1)))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) K tuples: STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, STARTBREADTH#1_1, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c29_1, c4_2, c4_1, c2_1, c32_1, c_2, c_1, c22_2, c22_1 ---------------------------------------- (127) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(enqueue#1(tuple#2(nil, nil), tuple#4(x0, x0, x1, x1)))) by STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(tuple#2(::(tuple#4(x0, x0, x1, x1), nil), nil))) ---------------------------------------- (128) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(tuple#2(::(tuple#4(x0, x0, x1, x1), nil), nil))) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) K tuples: STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, STARTBREADTH#2_1, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1, STARTBREADTH#1_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c34_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_2, c22_1, c32_1 ---------------------------------------- (129) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 2 leading nodes: STARTBREADTH#1(::(x0, x1)) -> c32(STARTBREADTH#2(tuple#2(::(tuple#4(x0, x0, x1, x1), nil), nil))) STARTBREADTH#2(tuple#2(z0, z1)) -> c34(BREADTH(z0, z1)) ---------------------------------------- (130) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_2, c22_1 ---------------------------------------- (131) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BREADTH(z0, nil) -> c(BREADTH#1(dequeue#3(z0)), DEQUEUE(z0, nil)) by BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) ---------------------------------------- (132) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_2, c22_1 ---------------------------------------- (133) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) We considered the (Usable) Rules:none And the Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) The order we found is given by the following interpretation: Polynomial interpretation : POL(::(x_1, x_2)) = 0 POL(BREADTH(x_1, x_2)) = [1] POL(BREADTH#1(x_1)) = [1] POL(BREADTH#2(x_1, x_2)) = [1] POL(BREADTH#3(x_1, x_2)) = x_1 POL(BREADTH#5(x_1)) = [1] POL(COPYOVER(x_1, x_2)) = 0 POL(COPYOVER#1(x_1)) = 0 POL(COPYOVER#2(x_1, x_2)) = 0 POL(DEQUEUE(x_1, x_2)) = 0 POL(DEQUEUE#1(x_1)) = 0 POL(DEQUEUE#2(x_1, x_2)) = 0 POL(DEQUEUE#3(x_1)) = 0 POL(DEQUEUE#4(x_1)) = 0 POL(ENQUEUES(x_1, x_2)) = 0 POL(ENQUEUES#1(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c(x_1, x_2)) = x_1 + x_2 POL(c1(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c15(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c18(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c24(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c4(x_1, x_2)) = x_1 + x_2 POL(c6(x_1)) = x_1 POL(children#1(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(children#2(x_1, x_2)) = [1] + x_1 + x_2 POL(children#3(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_2 + x_3 + x_4 POL(copyover(x_1, x_2)) = 0 POL(copyover#1(x_1)) = [1] + x_1 POL(copyover#2(x_1, x_2)) = [1] + x_1 + x_2 POL(dequeue(x_1, x_2)) = [1] + x_1 + x_2 POL(dequeue#1(x_1)) = [1] + x_1 POL(dequeue#2(x_1, x_2)) = [1] + x_1 + x_2 POL(dequeue#3(x_1)) = [1] + x_1 POL(dequeue#4(x_1)) = [1] POL(enqueue(x_1, x_2)) = [1] + x_1 + x_2 POL(enqueue#1(x_1, x_2)) = x_1 + x_2 POL(enqueues(x_1, x_2)) = [1] + x_1 POL(enqueues#1(x_1, x_2)) = [1] + x_1 + x_2 POL(nil) = 0 POL(tuple#2(x_1, x_2)) = [1] POL(tuple#4(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_2 + x_3 + x_4 ---------------------------------------- (134) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_2, c22_1 ---------------------------------------- (135) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) We considered the (Usable) Rules: dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) And the Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) The order we found is given by the following interpretation: Polynomial interpretation : POL(::(x_1, x_2)) = [1] POL(BREADTH(x_1, x_2)) = [1] POL(BREADTH#1(x_1)) = x_1 POL(BREADTH#2(x_1, x_2)) = x_1 POL(BREADTH#3(x_1, x_2)) = [1] POL(BREADTH#5(x_1)) = [1] POL(COPYOVER(x_1, x_2)) = 0 POL(COPYOVER#1(x_1)) = 0 POL(COPYOVER#2(x_1, x_2)) = 0 POL(DEQUEUE(x_1, x_2)) = 0 POL(DEQUEUE#1(x_1)) = 0 POL(DEQUEUE#2(x_1, x_2)) = 0 POL(DEQUEUE#3(x_1)) = 0 POL(DEQUEUE#4(x_1)) = 0 POL(ENQUEUES(x_1, x_2)) = 0 POL(ENQUEUES#1(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c(x_1, x_2)) = x_1 + x_2 POL(c1(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c15(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c18(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c24(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c4(x_1, x_2)) = x_1 + x_2 POL(c6(x_1)) = x_1 POL(children#1(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(children#2(x_1, x_2)) = [1] + x_1 + x_2 POL(children#3(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_2 + x_3 + x_4 POL(copyover(x_1, x_2)) = 0 POL(copyover#1(x_1)) = [1] + x_1 POL(copyover#2(x_1, x_2)) = [1] + x_1 + x_2 POL(dequeue(x_1, x_2)) = [1] POL(dequeue#1(x_1)) = [1] POL(dequeue#2(x_1, x_2)) = [1] POL(dequeue#3(x_1)) = [1] POL(dequeue#4(x_1)) = [1] POL(enqueue(x_1, x_2)) = [1] + x_1 + x_2 POL(enqueue#1(x_1, x_2)) = x_1 + x_2 POL(enqueues(x_1, x_2)) = [1] + x_1 POL(enqueues#1(x_1, x_2)) = [1] + x_1 + x_2 POL(nil) = 0 POL(tuple#2(x_1, x_2)) = x_2 POL(tuple#4(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_2 + x_3 ---------------------------------------- (136) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_2, c22_1 ---------------------------------------- (137) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue(x1, x3))), ENQUEUES(::(x1, z0), x3)) by BREADTH#3(tuple#2(x0, ::(x1, ::(z0, z1))), x3) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, enqueue(x1, x3)))), ENQUEUES(::(x1, ::(z0, z1)), x3)) BREADTH#3(tuple#2(x0, ::(x1, nil)), x3) -> c4(BREADTH#5(enqueue(x1, x3)), ENQUEUES(::(x1, nil), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) ---------------------------------------- (138) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(x1, ::(z0, z1))), x3) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, enqueue(x1, x3)))), ENQUEUES(::(x1, ::(z0, z1)), x3)) BREADTH#3(tuple#2(x0, ::(x1, nil)), x3) -> c4(BREADTH#5(enqueue(x1, x3)), ENQUEUES(::(x1, nil), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH#3(tuple#2(x0, ::(x1, ::(z0, z1))), x3) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, enqueue(x1, x3)))), ENQUEUES(::(x1, ::(z0, z1)), x3)) BREADTH#3(tuple#2(x0, ::(x1, nil)), x3) -> c4(BREADTH#5(enqueue(x1, x3)), ENQUEUES(::(x1, nil), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_2, c22_1 ---------------------------------------- (139) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) ---------------------------------------- (140) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(x1, ::(z0, z1))), x3) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, enqueue(x1, x3)))), ENQUEUES(::(x1, ::(z0, z1)), x3)) BREADTH#3(tuple#2(x0, ::(x1, nil)), x3) -> c4(BREADTH#5(enqueue(x1, x3)), ENQUEUES(::(x1, nil), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH#3(tuple#2(x0, ::(x1, ::(z0, z1))), x3) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, enqueue(x1, x3)))), ENQUEUES(::(x1, ::(z0, z1)), x3)) BREADTH#3(tuple#2(x0, ::(x1, nil)), x3) -> c4(BREADTH#5(enqueue(x1, x3)), ENQUEUES(::(x1, nil), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_2, c22_1 ---------------------------------------- (141) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) by BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue#1(x3, x1))), ENQUEUES(::(x1, z0), x3)) BREADTH#3(tuple#2(x0, ::(z2, x2)), tuple#2(z0, z1)) -> c4(BREADTH#5(enqueues(x2, tuple#2(::(z2, z0), z1))), ENQUEUES(::(z2, x2), tuple#2(z0, z1))) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) ---------------------------------------- (142) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(x1, ::(z0, z1))), x3) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, enqueue(x1, x3)))), ENQUEUES(::(x1, ::(z0, z1)), x3)) BREADTH#3(tuple#2(x0, ::(x1, nil)), x3) -> c4(BREADTH#5(enqueue(x1, x3)), ENQUEUES(::(x1, nil), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(z2, x2)), tuple#2(z0, z1)) -> c4(BREADTH#5(enqueues(x2, tuple#2(::(z2, z0), z1))), ENQUEUES(::(z2, x2), tuple#2(z0, z1))) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH#3(tuple#2(x0, ::(x1, ::(z0, z1))), x3) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, enqueue(x1, x3)))), ENQUEUES(::(x1, ::(z0, z1)), x3)) BREADTH#3(tuple#2(x0, ::(x1, nil)), x3) -> c4(BREADTH#5(enqueue(x1, x3)), ENQUEUES(::(x1, nil), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(z2, x2)), tuple#2(z0, z1)) -> c4(BREADTH#5(enqueues(x2, tuple#2(::(z2, z0), z1))), ENQUEUES(::(z2, x2), tuple#2(z0, z1))) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_2, c22_1 ---------------------------------------- (143) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) ---------------------------------------- (144) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(x1, ::(z0, z1))), x3) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, enqueue(x1, x3)))), ENQUEUES(::(x1, ::(z0, z1)), x3)) BREADTH#3(tuple#2(x0, ::(x1, nil)), x3) -> c4(BREADTH#5(enqueue(x1, x3)), ENQUEUES(::(x1, nil), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(z2, x2)), tuple#2(z0, z1)) -> c4(BREADTH#5(enqueues(x2, tuple#2(::(z2, z0), z1))), ENQUEUES(::(z2, x2), tuple#2(z0, z1))) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH#3(tuple#2(x0, ::(x1, ::(z0, z1))), x3) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, enqueue(x1, x3)))), ENQUEUES(::(x1, ::(z0, z1)), x3)) BREADTH#3(tuple#2(x0, ::(x1, nil)), x3) -> c4(BREADTH#5(enqueue(x1, x3)), ENQUEUES(::(x1, nil), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(z2, x2)), tuple#2(z0, z1)) -> c4(BREADTH#5(enqueues(x2, tuple#2(::(z2, z0), z1))), ENQUEUES(::(z2, x2), tuple#2(z0, z1))) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_2, c22_1 ---------------------------------------- (145) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) by DEQUEUE#3(::(x0, z0)) -> c22(DEQUEUE#4(copyover#1(tuple#2(z0, ::(x0, nil)))), COPYOVER(::(x0, z0), nil)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) ---------------------------------------- (146) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(x1, ::(z0, z1))), x3) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, enqueue(x1, x3)))), ENQUEUES(::(x1, ::(z0, z1)), x3)) BREADTH#3(tuple#2(x0, ::(x1, nil)), x3) -> c4(BREADTH#5(enqueue(x1, x3)), ENQUEUES(::(x1, nil), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(z2, x2)), tuple#2(z0, z1)) -> c4(BREADTH#5(enqueues(x2, tuple#2(::(z2, z0), z1))), ENQUEUES(::(z2, x2), tuple#2(z0, z1))) DEQUEUE#3(::(x0, z0)) -> c22(DEQUEUE#4(copyover#1(tuple#2(z0, ::(x0, nil)))), COPYOVER(::(x0, z0), nil)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) BREADTH#3(tuple#2(x0, ::(x1, ::(z0, z1))), x3) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, enqueue(x1, x3)))), ENQUEUES(::(x1, ::(z0, z1)), x3)) BREADTH#3(tuple#2(x0, ::(x1, nil)), x3) -> c4(BREADTH#5(enqueue(x1, x3)), ENQUEUES(::(x1, nil), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(z2, x2)), tuple#2(z0, z1)) -> c4(BREADTH#5(enqueues(x2, tuple#2(::(z2, z0), z1))), ENQUEUES(::(z2, x2), tuple#2(z0, z1))) DEQUEUE#3(::(x0, z0)) -> c22(DEQUEUE#4(copyover#1(tuple#2(z0, ::(x0, nil)))), COPYOVER(::(x0, z0), nil)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_1, c22_2 ---------------------------------------- (147) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) by BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#1(tuple#2(::(z0, z1), nil)))), DEQUEUE(::(z0, z1), nil)) ---------------------------------------- (148) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(x1, ::(z0, z1))), x3) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, enqueue(x1, x3)))), ENQUEUES(::(x1, ::(z0, z1)), x3)) BREADTH#3(tuple#2(x0, ::(x1, nil)), x3) -> c4(BREADTH#5(enqueue(x1, x3)), ENQUEUES(::(x1, nil), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(z2, x2)), tuple#2(z0, z1)) -> c4(BREADTH#5(enqueues(x2, tuple#2(::(z2, z0), z1))), ENQUEUES(::(z2, x2), tuple#2(z0, z1))) DEQUEUE#3(::(x0, z0)) -> c22(DEQUEUE#4(copyover#1(tuple#2(z0, ::(x0, nil)))), COPYOVER(::(x0, z0), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#1(tuple#2(::(z0, z1), nil)))), DEQUEUE(::(z0, z1), nil)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(x1, ::(z0, z1))), x3) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, enqueue(x1, x3)))), ENQUEUES(::(x1, ::(z0, z1)), x3)) BREADTH#3(tuple#2(x0, ::(x1, nil)), x3) -> c4(BREADTH#5(enqueue(x1, x3)), ENQUEUES(::(x1, nil), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(z2, x2)), tuple#2(z0, z1)) -> c4(BREADTH#5(enqueues(x2, tuple#2(::(z2, z0), z1))), ENQUEUES(::(z2, x2), tuple#2(z0, z1))) DEQUEUE#3(::(x0, z0)) -> c22(DEQUEUE#4(copyover#1(tuple#2(z0, ::(x0, nil)))), COPYOVER(::(x0, z0), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#1(tuple#2(::(z0, z1), nil)))), DEQUEUE(::(z0, z1), nil)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_1, c22_2 ---------------------------------------- (149) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace BREADTH#3(tuple#2(x0, ::(x1, ::(z0, z1))), x3) -> c4(BREADTH#5(enqueues(z1, enqueue(z0, enqueue(x1, x3)))), ENQUEUES(::(x1, ::(z0, z1)), x3)) by BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) ---------------------------------------- (150) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(x1, nil)), x3) -> c4(BREADTH#5(enqueue(x1, x3)), ENQUEUES(::(x1, nil), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(z2, x2)), tuple#2(z0, z1)) -> c4(BREADTH#5(enqueues(x2, tuple#2(::(z2, z0), z1))), ENQUEUES(::(z2, x2), tuple#2(z0, z1))) DEQUEUE#3(::(x0, z0)) -> c22(DEQUEUE#4(copyover#1(tuple#2(z0, ::(x0, nil)))), COPYOVER(::(x0, z0), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#1(tuple#2(::(z0, z1), nil)))), DEQUEUE(::(z0, z1), nil)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(x1, nil)), x3) -> c4(BREADTH#5(enqueue(x1, x3)), ENQUEUES(::(x1, nil), x3)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(z2, x2)), tuple#2(z0, z1)) -> c4(BREADTH#5(enqueues(x2, tuple#2(::(z2, z0), z1))), ENQUEUES(::(z2, x2), tuple#2(z0, z1))) DEQUEUE#3(::(x0, z0)) -> c22(DEQUEUE#4(copyover#1(tuple#2(z0, ::(x0, nil)))), COPYOVER(::(x0, z0), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#1(tuple#2(::(z0, z1), nil)))), DEQUEUE(::(z0, z1), nil)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_1, c22_2 ---------------------------------------- (151) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace BREADTH#3(tuple#2(x0, ::(x1, nil)), x3) -> c4(BREADTH#5(enqueue(x1, x3)), ENQUEUES(::(x1, nil), x3)) by BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) ---------------------------------------- (152) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(z2, x2)), tuple#2(z0, z1)) -> c4(BREADTH#5(enqueues(x2, tuple#2(::(z2, z0), z1))), ENQUEUES(::(z2, x2), tuple#2(z0, z1))) DEQUEUE#3(::(x0, z0)) -> c22(DEQUEUE#4(copyover#1(tuple#2(z0, ::(x0, nil)))), COPYOVER(::(x0, z0), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#1(tuple#2(::(z0, z1), nil)))), DEQUEUE(::(z0, z1), nil)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(x0, ::(z2, x2)), tuple#2(z0, z1)) -> c4(BREADTH#5(enqueues(x2, tuple#2(::(z2, z0), z1))), ENQUEUES(::(z2, x2), tuple#2(z0, z1))) DEQUEUE#3(::(x0, z0)) -> c22(DEQUEUE#4(copyover#1(tuple#2(z0, ::(x0, nil)))), COPYOVER(::(x0, z0), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#1(tuple#2(::(z0, z1), nil)))), DEQUEUE(::(z0, z1), nil)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_1, c22_2 ---------------------------------------- (153) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace BREADTH#3(tuple#2(x0, ::(z2, x2)), tuple#2(z0, z1)) -> c4(BREADTH#5(enqueues(x2, tuple#2(::(z2, z0), z1))), ENQUEUES(::(z2, x2), tuple#2(z0, z1))) by BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) ---------------------------------------- (154) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) DEQUEUE#3(::(x0, z0)) -> c22(DEQUEUE#4(copyover#1(tuple#2(z0, ::(x0, nil)))), COPYOVER(::(x0, z0), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#1(tuple#2(::(z0, z1), nil)))), DEQUEUE(::(z0, z1), nil)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) DEQUEUE#3(::(x0, z0)) -> c22(DEQUEUE#4(copyover#1(tuple#2(z0, ::(x0, nil)))), COPYOVER(::(x0, z0), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#1(tuple#2(::(z0, z1), nil)))), DEQUEUE(::(z0, z1), nil)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_1, c22_2 ---------------------------------------- (155) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace DEQUEUE#3(::(x0, z0)) -> c22(DEQUEUE#4(copyover#1(tuple#2(z0, ::(x0, nil)))), COPYOVER(::(x0, z0), nil)) by DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) ---------------------------------------- (156) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#1(tuple#2(::(z0, z1), nil)))), DEQUEUE(::(z0, z1), nil)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#1(tuple#2(::(z0, z1), nil)))), DEQUEUE(::(z0, z1), nil)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_1, c22_2 ---------------------------------------- (157) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#1(tuple#2(::(z0, z1), nil)))), DEQUEUE(::(z0, z1), nil)) by BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) ---------------------------------------- (158) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER_2, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1 Compound Symbols: c1_1, c6_1, c14_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_1, c22_2 ---------------------------------------- (159) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace COPYOVER(z0, z1) -> c14(COPYOVER#1(tuple#2(z0, z1))) by COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) ---------------------------------------- (160) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) S tuples: BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#1_1, BREADTH#5_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1, COPYOVER_2 Compound Symbols: c1_1, c6_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_1, c22_2, c14_1 ---------------------------------------- (161) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace BREADTH#1(tuple#2(z0, z1)) -> c1(BREADTH#2(z1, z0)) by BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) ---------------------------------------- (162) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(BREADTH#1(tuple#2(tuple#2(nil, nil), nil)), DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1 Compound Symbols: c6_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_1, c22_2, c14_1, c1_1 ---------------------------------------- (163) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (164) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1 Compound Symbols: c6_1, c15_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_1, c22_2, c14_1, c1_1 ---------------------------------------- (165) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace COPYOVER#1(tuple#2(z0, z1)) -> c15(COPYOVER#2(z0, z1)) by COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) ---------------------------------------- (166) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, COPYOVER#2_2, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1 Compound Symbols: c6_1, c16_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_1, c22_2, c14_1, c1_1, c15_1 ---------------------------------------- (167) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace COPYOVER#2(::(z0, z1), z2) -> c16(COPYOVER(z1, ::(z0, z2))) by COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) ---------------------------------------- (168) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2 Compound Symbols: c6_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_1, c22_2, c14_1, c1_1, c15_1, c16_1 ---------------------------------------- (169) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue(z2, enqueue(z1, z4)))), ENQUEUES(::(z1, ::(z2, z3)), z4)) by BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) ---------------------------------------- (170) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, DEQUEUE_2, DEQUEUE#1_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2 Compound Symbols: c6_1, c18_1, c19_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_1, c22_2, c14_1, c1_1, c15_1, c16_1 ---------------------------------------- (171) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace DEQUEUE#1(tuple#2(z0, z1)) -> c19(DEQUEUE#2(z1, z0)) by DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) ---------------------------------------- (172) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, DEQUEUE_2, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE#1_1 Compound Symbols: c6_1, c18_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_1, c22_2, c14_1, c1_1, c15_1, c16_1, c19_1 ---------------------------------------- (173) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace DEQUEUE(z0, z1) -> c18(DEQUEUE#1(tuple#2(z0, z1))) by DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) ---------------------------------------- (174) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil))), DEQUEUE(z2, ::(z0, z1))) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE#1_1, DEQUEUE_2 Compound Symbols: c6_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_2, c_1, c22_1, c22_2, c14_1, c1_1, c15_1, c16_1, c19_1, c18_1 ---------------------------------------- (175) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (176) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE#1_1, DEQUEUE_2 Compound Symbols: c6_1, c21_1, c24_1, c28_1, c29_1, c4_2, c4_1, c2_1, c_1, c22_1, c22_2, c_2, c14_1, c1_1, c15_1, c16_1, c19_1, c18_1 ---------------------------------------- (177) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace BREADTH#3(tuple#2(x0, nil), z0) -> c4(BREADTH#5(z0), ENQUEUES(nil, z0)) by BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5), ENQUEUES(nil, x5)) ---------------------------------------- (178) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5), ENQUEUES(nil, x5)) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5), ENQUEUES(nil, x5)) K tuples: BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#3_2, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE#1_1, DEQUEUE_2 Compound Symbols: c6_1, c21_1, c24_1, c28_1, c29_1, c4_1, c2_1, c_1, c22_1, c4_2, c22_2, c_2, c14_1, c1_1, c15_1, c16_1, c19_1, c18_1 ---------------------------------------- (179) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace BREADTH#3(tuple#2(x0, x1), x2) -> c4(ENQUEUES(x1, x2)) by BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) ---------------------------------------- (180) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5), ENQUEUES(nil, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5), ENQUEUES(nil, x5)) K tuples: BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#2_2, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE#1_1, DEQUEUE_2 Compound Symbols: c6_1, c21_1, c24_1, c28_1, c29_1, c2_1, c_1, c4_1, c22_1, c4_2, c22_2, c_2, c14_1, c1_1, c15_1, c16_1, c19_1, c18_1 ---------------------------------------- (181) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace DEQUEUE#2(nil, z0) -> c21(DEQUEUE#3(z0)) by DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) ---------------------------------------- (182) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5), ENQUEUES(nil, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5), ENQUEUES(nil, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) K tuples: BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#2_2, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE#1_1, DEQUEUE_2, DEQUEUE#2_2 Compound Symbols: c6_1, c24_1, c28_1, c29_1, c2_1, c_1, c4_1, c22_1, c4_2, c22_2, c_2, c14_1, c1_1, c15_1, c16_1, c19_1, c18_1, c21_1 ---------------------------------------- (183) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) by BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) ---------------------------------------- (184) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5), ENQUEUES(nil, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5), ENQUEUES(nil, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) K tuples: BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#2_2, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE#1_1, DEQUEUE_2, DEQUEUE#2_2 Compound Symbols: c6_1, c24_1, c28_1, c29_1, c2_1, c_1, c4_1, c22_1, c4_2, c22_2, c_2, c14_1, c1_1, c15_1, c16_1, c19_1, c18_1, c21_1 ---------------------------------------- (185) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace DEQUEUE#4(tuple#2(z0, z1)) -> c24(DEQUEUE(z0, z1)) by DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) ---------------------------------------- (186) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5), ENQUEUES(nil, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5), ENQUEUES(nil, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) K tuples: BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#2_2, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE#1_1, DEQUEUE_2, DEQUEUE#2_2, DEQUEUE#4_1 Compound Symbols: c6_1, c28_1, c29_1, c2_1, c_1, c4_1, c22_1, c4_2, c22_2, c_2, c14_1, c1_1, c15_1, c16_1, c19_1, c18_1, c21_1, c24_1 ---------------------------------------- (187) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) We considered the (Usable) Rules: copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) And the Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5), ENQUEUES(nil, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) The order we found is given by the following interpretation: Polynomial interpretation : POL(::(x_1, x_2)) = 0 POL(BREADTH(x_1, x_2)) = 0 POL(BREADTH#1(x_1)) = 0 POL(BREADTH#2(x_1, x_2)) = x_1 POL(BREADTH#3(x_1, x_2)) = 0 POL(BREADTH#5(x_1)) = 0 POL(COPYOVER(x_1, x_2)) = 0 POL(COPYOVER#1(x_1)) = 0 POL(COPYOVER#2(x_1, x_2)) = 0 POL(DEQUEUE(x_1, x_2)) = 0 POL(DEQUEUE#1(x_1)) = 0 POL(DEQUEUE#2(x_1, x_2)) = 0 POL(DEQUEUE#3(x_1)) = x_1 POL(DEQUEUE#4(x_1)) = x_1 POL(ENQUEUES(x_1, x_2)) = 0 POL(ENQUEUES#1(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c(x_1, x_2)) = x_1 + x_2 POL(c1(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c15(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c18(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c2(x_1)) = x_1 POL(c21(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c24(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c4(x_1, x_2)) = x_1 + x_2 POL(c6(x_1)) = x_1 POL(children#1(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(children#2(x_1, x_2)) = [1] + x_1 + x_2 POL(children#3(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_2 + x_3 + x_4 POL(copyover(x_1, x_2)) = x_2 POL(copyover#1(x_1)) = x_1 POL(copyover#2(x_1, x_2)) = x_2 POL(dequeue(x_1, x_2)) = [1] + x_1 + x_2 POL(dequeue#1(x_1)) = [1] + x_1 POL(dequeue#2(x_1, x_2)) = [1] + x_1 + x_2 POL(dequeue#3(x_1)) = [1] + x_1 POL(dequeue#4(x_1)) = [1] POL(enqueue(x_1, x_2)) = [1] + x_1 + x_2 POL(enqueue#1(x_1, x_2)) = x_2 POL(enqueues(x_1, x_2)) = [1] + x_1 + x_2 POL(enqueues#1(x_1, x_2)) = [1] + x_1 + x_2 POL(nil) = [1] POL(tuple#2(x_1, x_2)) = x_2 POL(tuple#4(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_4 ---------------------------------------- (188) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5), ENQUEUES(nil, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5), ENQUEUES(nil, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) K tuples: BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, ENQUEUES_2, ENQUEUES#1_2, BREADTH#2_2, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE#1_1, DEQUEUE_2, DEQUEUE#2_2, DEQUEUE#4_1 Compound Symbols: c6_1, c28_1, c29_1, c2_1, c_1, c4_1, c22_1, c4_2, c22_2, c_2, c14_1, c1_1, c15_1, c16_1, c19_1, c18_1, c21_1, c24_1 ---------------------------------------- (189) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace ENQUEUES(z0, z1) -> c28(ENQUEUES#1(z0, z1)) by ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) ---------------------------------------- (190) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5), ENQUEUES(nil, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5), ENQUEUES(nil, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) K tuples: BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, ENQUEUES#1_2, BREADTH#2_2, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE#1_1, DEQUEUE_2, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2 Compound Symbols: c6_1, c29_1, c2_1, c_1, c4_1, c22_1, c4_2, c22_2, c_2, c14_1, c1_1, c15_1, c16_1, c19_1, c18_1, c21_1, c24_1, c28_1 ---------------------------------------- (191) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (192) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5)) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5)) K tuples: BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, ENQUEUES#1_2, BREADTH#2_2, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE#1_1, DEQUEUE_2, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2 Compound Symbols: c6_1, c29_1, c2_1, c_1, c4_1, c22_1, c4_2, c22_2, c_2, c14_1, c1_1, c15_1, c16_1, c19_1, c18_1, c21_1, c24_1, c28_1 ---------------------------------------- (193) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) by BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(BREADTH#5(enqueues#1(z2, enqueue#1(x5, z1))), ENQUEUES(::(z1, z2), x5)) ---------------------------------------- (194) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(BREADTH#5(enqueues#1(z2, enqueue#1(x5, z1))), ENQUEUES(::(z1, z2), x5)) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(BREADTH#5(enqueues#1(z2, enqueue#1(x5, z1))), ENQUEUES(::(z1, z2), x5)) K tuples: BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, ENQUEUES#1_2, BREADTH#2_2, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE#1_1, DEQUEUE_2, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2 Compound Symbols: c6_1, c29_1, c2_1, c_1, c4_1, c22_1, c4_2, c22_2, c_2, c14_1, c1_1, c15_1, c16_1, c19_1, c18_1, c21_1, c24_1, c28_1 ---------------------------------------- (195) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) by BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) ---------------------------------------- (196) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(BREADTH#5(enqueues#1(z2, enqueue#1(x5, z1))), ENQUEUES(::(z1, z2), x5)) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(BREADTH#5(enqueues#1(z2, enqueue#1(x5, z1))), ENQUEUES(::(z1, z2), x5)) K tuples: BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, ENQUEUES#1_2, BREADTH#2_2, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE#1_1, DEQUEUE_2, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2 Compound Symbols: c6_1, c29_1, c2_1, c_1, c4_1, c22_1, c4_2, c22_2, c_2, c14_1, c1_1, c15_1, c16_1, c19_1, c18_1, c21_1, c24_1, c28_1 ---------------------------------------- (197) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace ENQUEUES#1(::(z0, x1), z1) -> c29(ENQUEUES(x1, enqueue#1(z1, z0))) by ENQUEUES#1(::(z0, ::(y0, y1)), z2) -> c29(ENQUEUES(::(y0, y1), enqueue#1(z2, z0))) ---------------------------------------- (198) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(x0, ::(z0, x2)), z1) -> c4(BREADTH#5(enqueues#1(x2, enqueue#1(z1, z0))), ENQUEUES(::(z0, x2), z1)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(BREADTH#5(enqueues#1(z2, enqueue#1(x5, z1))), ENQUEUES(::(z1, z2), x5)) ENQUEUES#1(::(z0, ::(y0, y1)), z2) -> c29(ENQUEUES(::(y0, y1), enqueue#1(z2, z0))) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(BREADTH#5(enqueues#1(z2, enqueue#1(x5, z1))), ENQUEUES(::(z1, z2), x5)) ENQUEUES#1(::(z0, ::(y0, y1)), z2) -> c29(ENQUEUES(::(y0, y1), enqueue#1(z2, z0))) K tuples: BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, BREADTH#2_2, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE#1_1, DEQUEUE_2, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2 Compound Symbols: c6_1, c2_1, c_1, c4_1, c22_1, c4_2, c22_2, c_2, c14_1, c1_1, c15_1, c16_1, c19_1, c18_1, c21_1, c24_1, c28_1, c29_1 ---------------------------------------- (199) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace BREADTH#3(tuple#2(x0, ::(x1, z0)), x3) -> c4(BREADTH#5(enqueues#1(z0, enqueue#1(x3, x1))), ENQUEUES(::(x1, z0), x3)) by BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(BREADTH#5(enqueues#1(z2, enqueue#1(x5, z1))), ENQUEUES(::(z1, z2), x5)) ---------------------------------------- (200) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(BREADTH#5(enqueues#1(z2, enqueue#1(x5, z1))), ENQUEUES(::(z1, z2), x5)) ENQUEUES#1(::(z0, ::(y0, y1)), z2) -> c29(ENQUEUES(::(y0, y1), enqueue#1(z2, z0))) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(BREADTH#5(enqueues#1(z2, enqueue#1(x5, z1))), ENQUEUES(::(z1, z2), x5)) ENQUEUES#1(::(z0, ::(y0, y1)), z2) -> c29(ENQUEUES(::(y0, y1), enqueue#1(z2, z0))) K tuples: BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, BREADTH#2_2, BREADTH_2, BREADTH#3_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE#1_1, DEQUEUE_2, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2 Compound Symbols: c6_1, c2_1, c_1, c4_1, c22_1, c4_2, c22_2, c_2, c14_1, c1_1, c15_1, c16_1, c19_1, c18_1, c21_1, c24_1, c28_1, c29_1 ---------------------------------------- (201) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace BREADTH#3(tuple#2(x0, ::(x1, x2)), x3) -> c4(ENQUEUES(::(x1, x2), x3)) by BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) ---------------------------------------- (202) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(BREADTH#5(enqueues#1(z2, enqueue#1(x5, z1))), ENQUEUES(::(z1, z2), x5)) ENQUEUES#1(::(z0, ::(y0, y1)), z2) -> c29(ENQUEUES(::(y0, y1), enqueue#1(z2, z0))) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(BREADTH#5(enqueues#1(z2, enqueue#1(x5, z1))), ENQUEUES(::(z1, z2), x5)) ENQUEUES#1(::(z0, ::(y0, y1)), z2) -> c29(ENQUEUES(::(y0, y1), enqueue#1(z2, z0))) K tuples: BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1, BREADTH#3_2, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE#1_1, DEQUEUE_2, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2 Compound Symbols: c6_1, c2_1, c_1, c22_1, c4_2, c22_2, c_2, c14_1, c1_1, c15_1, c16_1, c19_1, c18_1, c4_1, c21_1, c24_1, c28_1, c29_1 ---------------------------------------- (203) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace BREADTH#3(tuple#2(z0, ::(z1, nil)), z2) -> c4(BREADTH#5(enqueue#1(z2, z1)), ENQUEUES(::(z1, nil), z2)) by BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, nil)), x5) -> c4(BREADTH#5(enqueue#1(x5, z1)), ENQUEUES(::(z1, nil), x5)) ---------------------------------------- (204) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(BREADTH#5(enqueues#1(z2, enqueue#1(x5, z1))), ENQUEUES(::(z1, z2), x5)) ENQUEUES#1(::(z0, ::(y0, y1)), z2) -> c29(ENQUEUES(::(y0, y1), enqueue#1(z2, z0))) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, nil)), x5) -> c4(BREADTH#5(enqueue#1(x5, z1)), ENQUEUES(::(z1, nil), x5)) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(BREADTH#5(enqueues#1(z2, enqueue#1(x5, z1))), ENQUEUES(::(z1, z2), x5)) ENQUEUES#1(::(z0, ::(y0, y1)), z2) -> c29(ENQUEUES(::(y0, y1), enqueue#1(z2, z0))) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, nil)), x5) -> c4(BREADTH#5(enqueue#1(x5, z1)), ENQUEUES(::(z1, nil), x5)) K tuples: BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1, BREADTH#3_2, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, DEQUEUE#1_1, DEQUEUE_2, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2 Compound Symbols: c6_1, c2_1, c_1, c22_1, c4_2, c22_2, c_2, c14_1, c1_1, c15_1, c16_1, c19_1, c18_1, c4_1, c21_1, c24_1, c28_1, c29_1 ---------------------------------------- (205) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace BREADTH#3(tuple#2(z0, ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) by BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) ---------------------------------------- (206) Obligation: Complexity Dependency Tuples Problem Rules: enqueue#1(tuple#2(z0, z1), z2) -> tuple#2(::(z2, z0), z1) enqueue(z0, z1) -> enqueue#1(z1, z0) dequeue#2(::(z0, z1), z2) -> tuple#2(tuple#2(z2, z1), ::(z0, nil)) dequeue#2(nil, z0) -> dequeue#3(z0) dequeue#3(::(z0, z1)) -> dequeue#4(copyover(::(z0, z1), nil)) dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) dequeue#4(tuple#2(z0, z1)) -> dequeue(z0, z1) copyover(z0, z1) -> copyover#1(tuple#2(z0, z1)) copyover#1(tuple#2(z0, z1)) -> copyover#2(z0, z1) copyover#2(::(z0, z1), z2) -> copyover(z1, ::(z0, z2)) copyover#2(nil, z0) -> tuple#2(nil, z0) dequeue(z0, z1) -> dequeue#1(tuple#2(z0, z1)) dequeue#1(tuple#2(z0, z1)) -> dequeue#2(z1, z0) enqueues(z0, z1) -> enqueues#1(z0, z1) enqueues#1(::(z0, z1), z2) -> enqueues(z1, enqueue(z0, z2)) enqueues#1(nil, z0) -> z0 children#1(::(z0, z1), z2, z3) -> children#3(z3, z2, z0, z1) children#1(nil, z0, z1) -> children#2(z1, z0) children#3(::(z0, z1), z2, z3, z4) -> ::(tuple#4(z3, z2, nil, z4), ::(tuple#4(z3, z0, z4, z1), nil)) children#3(nil, z0, z1, z2) -> nil children#2(::(z0, z1), z2) -> ::(tuple#4(z0, z2, nil, z1), nil) children#2(nil, z0) -> nil Tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(BREADTH#5(enqueues#1(z2, enqueue#1(x5, z1))), ENQUEUES(::(z1, z2), x5)) ENQUEUES#1(::(z0, ::(y0, y1)), z2) -> c29(ENQUEUES(::(y0, y1), enqueue#1(z2, z0))) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, nil)), x5) -> c4(BREADTH#5(enqueue#1(x5, z1)), ENQUEUES(::(z1, nil), x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) S tuples: BREADTH#5(tuple#2(z0, z1)) -> c6(BREADTH(z0, z1)) BREADTH#2(::(tuple#4(z0, z1, z2, z3), x4), x5) -> c2(BREADTH#3(tuple#2(tuple#2(z0, z1), children#1(z2, z1, z3)), x5)) DEQUEUE#3(::(x0, x1)) -> c22(COPYOVER(::(x0, x1), nil)) DEQUEUE#3(::(z0, z1)) -> c22(DEQUEUE#4(copyover#2(z1, ::(z0, nil))), COPYOVER(::(z0, z1), nil)) BREADTH(::(z0, z1), nil) -> c(BREADTH#1(dequeue#4(copyover#2(::(z0, z1), nil))), DEQUEUE(::(z0, z1), nil)) COPYOVER(x1, ::(x0, x2)) -> c14(COPYOVER#1(tuple#2(x1, ::(x0, x2)))) COPYOVER(::(x0, x1), nil) -> c14(COPYOVER#1(tuple#2(::(x0, x1), nil))) BREADTH#1(tuple#2(z0, ::(tuple#4(y0, y1, y2, y3), y4))) -> c1(BREADTH#2(::(tuple#4(y0, y1, y2, y3), y4), z0)) COPYOVER#1(tuple#2(x0, ::(x1, x2))) -> c15(COPYOVER#2(x0, ::(x1, x2))) COPYOVER#1(tuple#2(::(x0, x1), nil)) -> c15(COPYOVER#2(::(x0, x1), nil)) COPYOVER#2(::(z0, z1), ::(x1, x2)) -> c16(COPYOVER(z1, ::(z0, ::(x1, x2)))) COPYOVER#2(::(x0, x1), nil) -> c16(COPYOVER(x1, ::(x0, nil))) BREADTH#3(tuple#2(z0, ::(z1, ::(z2, z3))), z4) -> c4(BREADTH#5(enqueues#1(z3, enqueue#1(enqueue(z1, z4), z2))), ENQUEUES(::(z1, ::(z2, z3)), z4)) DEQUEUE#1(tuple#2(z0, nil)) -> c19(DEQUEUE#2(nil, z0)) DEQUEUE(z0, nil) -> c18(DEQUEUE#1(tuple#2(z0, nil))) BREADTH(z2, ::(z0, z1)) -> c(BREADTH#1(tuple#2(tuple#2(z2, z1), ::(z0, nil)))) DEQUEUE#2(nil, ::(y0, y1)) -> c21(DEQUEUE#3(::(y0, y1))) ENQUEUES(::(y0, y1), z1) -> c28(ENQUEUES#1(::(y0, y1), z1)) BREADTH#3(tuple#2(tuple#2(x0, x1), nil), x5) -> c4(BREADTH#5(x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(BREADTH#5(enqueues#1(z2, enqueue#1(x5, z1))), ENQUEUES(::(z1, z2), x5)) ENQUEUES#1(::(z0, ::(y0, y1)), z2) -> c29(ENQUEUES(::(y0, y1), enqueue#1(z2, z0))) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, nil)), x5) -> c4(BREADTH#5(enqueue#1(x5, z1)), ENQUEUES(::(z1, nil), x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), tuple#2(z3, z4)) -> c4(BREADTH#5(enqueues#1(z2, tuple#2(::(z1, z3), z4))), ENQUEUES(::(z1, z2), tuple#2(z3, z4))) K tuples: BREADTH(x0, x1) -> c(DEQUEUE(x0, x1)) BREADTH(x0, nil) -> c(DEQUEUE(x0, nil)) BREADTH(nil, nil) -> c(DEQUEUE(nil, nil)) BREADTH#3(tuple#2(tuple#2(x0, x1), y0), x5) -> c4(ENQUEUES(y0, x5)) BREADTH#3(tuple#2(tuple#2(x0, x1), ::(z1, z2)), x5) -> c4(ENQUEUES(::(z1, z2), x5)) DEQUEUE#4(tuple#2(z0, nil)) -> c24(DEQUEUE(z0, nil)) Defined Rule Symbols: enqueue#1_2, enqueue_2, dequeue#2_2, dequeue#3_1, dequeue#4_1, copyover_2, copyover#1_1, copyover#2_2, dequeue_2, dequeue#1_1, enqueues_2, enqueues#1_2, children#1_3, children#3_4, children#2_2 Defined Pair Symbols: BREADTH#5_1, BREADTH#2_2, BREADTH_2, DEQUEUE#3_1, COPYOVER_2, BREADTH#1_1, COPYOVER#1_1, COPYOVER#2_2, BREADTH#3_2, DEQUEUE#1_1, DEQUEUE_2, DEQUEUE#2_2, DEQUEUE#4_1, ENQUEUES_2, ENQUEUES#1_2 Compound Symbols: c6_1, c2_1, c_1, c22_1, c22_2, c_2, c14_1, c1_1, c15_1, c16_1, c4_2, c19_1, c18_1, c4_1, c21_1, c24_1, c28_1, c29_1 ---------------------------------------- (207) RelTrsToWeightedTrsProof (UPPER BOUND(ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (208) 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: breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue(@breadth@1, @breadth@2)) [1] breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') [1] breadth#2(::(@z, @_@9), @queue') -> breadth#3(breadth#4(@z), @queue') [1] breadth#2(nil, @queue') -> nil [1] breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues(@ys, @queue'))) [1] breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) [1] breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) [1] children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) [1] children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) [1] children#1(nil, @b, @l2) -> children#2(@l2, @b) [1] children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil, @ys), nil) [1] children#2(nil, @b) -> nil [1] children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil, @xs), ::(tuple#4(@x, @y, @xs, @ys), nil)) [1] children#3(nil, @b, @x, @xs) -> nil [1] copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) [1] copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) [1] copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) [1] copyover#2(nil, @outq) -> tuple#2(nil, @outq) [1] dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) [1] dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) [1] dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil)) [1] dequeue#2(nil, @inq) -> dequeue#3(@inq) [1] dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil)) [1] dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) [1] dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) [1] empty(@x) -> tuple#2(nil, nil) [1] enqueue(@x, @queue) -> enqueue#1(@queue, @x) [1] enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) [1] enqueues(@l, @queue) -> enqueues#1(@l, @queue) [1] enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) [1] enqueues#1(nil, @queue) -> @queue [1] startBreadth(@xs) -> startBreadth#1(@xs) [1] startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit))) [1] startBreadth#1(nil) -> nil [1] startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) [1] Rewrite Strategy: INNERMOST ---------------------------------------- (209) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (210) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue(@breadth@1, @breadth@2)) [1] breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') [1] breadth#2(::(@z, @_@9), @queue') -> breadth#3(breadth#4(@z), @queue') [1] breadth#2(nil, @queue') -> nil [1] breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues(@ys, @queue'))) [1] breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) [1] breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) [1] children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) [1] children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) [1] children#1(nil, @b, @l2) -> children#2(@l2, @b) [1] children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil, @ys), nil) [1] children#2(nil, @b) -> nil [1] children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil, @xs), ::(tuple#4(@x, @y, @xs, @ys), nil)) [1] children#3(nil, @b, @x, @xs) -> nil [1] copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) [1] copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) [1] copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) [1] copyover#2(nil, @outq) -> tuple#2(nil, @outq) [1] dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) [1] dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) [1] dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil)) [1] dequeue#2(nil, @inq) -> dequeue#3(@inq) [1] dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil)) [1] dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) [1] dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) [1] empty(@x) -> tuple#2(nil, nil) [1] enqueue(@x, @queue) -> enqueue#1(@queue, @x) [1] enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) [1] enqueues(@l, @queue) -> enqueues#1(@l, @queue) [1] enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) [1] enqueues#1(nil, @queue) -> @queue [1] startBreadth(@xs) -> startBreadth#1(@xs) [1] startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit))) [1] startBreadth#1(nil) -> nil [1] startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) [1] The TRS has the following type information: breadth :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 tuple#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 :: :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 nil :: tuple#2::::nil:tuple#4 breadth#5 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueues :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 tuple#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 empty :: #unit -> tuple#2::::nil:tuple#4 enqueue :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueue#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueues#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 startBreadth :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 startBreadth#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 startBreadth#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 #unit :: #unit Rewrite Strategy: INNERMOST ---------------------------------------- (211) 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: breadth_2 breadth#1_1 breadth#2_2 breadth#3_2 breadth#5_1 startBreadth_1 startBreadth#1_1 startBreadth#2_1 (c) The following functions are completely defined: dequeue_2 enqueue_2 empty_1 breadth#4_1 enqueues_2 copyover_2 copyover#1_1 copyover#2_2 enqueue#1_2 children_4 enqueues#1_2 dequeue#1_1 dequeue#2_2 children#1_3 children#2_2 children#3_4 dequeue#3_1 dequeue#4_1 Due to the following rules being added: breadth#4(v0) -> nil [0] copyover#1(v0) -> nil [0] copyover#2(v0, v1) -> nil [0] enqueue#1(v0, v1) -> nil [0] enqueues#1(v0, v1) -> nil [0] dequeue#1(v0) -> nil [0] dequeue#2(v0, v1) -> nil [0] children#1(v0, v1, v2) -> nil [0] children#2(v0, v1) -> nil [0] children#3(v0, v1, v2, v3) -> nil [0] dequeue#3(v0) -> nil [0] dequeue#4(v0) -> nil [0] And the following fresh constants: none ---------------------------------------- (212) 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: breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue(@breadth@1, @breadth@2)) [1] breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') [1] breadth#2(::(@z, @_@9), @queue') -> breadth#3(breadth#4(@z), @queue') [1] breadth#2(nil, @queue') -> nil [1] breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues(@ys, @queue'))) [1] breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) [1] breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) [1] children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) [1] children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) [1] children#1(nil, @b, @l2) -> children#2(@l2, @b) [1] children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil, @ys), nil) [1] children#2(nil, @b) -> nil [1] children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil, @xs), ::(tuple#4(@x, @y, @xs, @ys), nil)) [1] children#3(nil, @b, @x, @xs) -> nil [1] copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) [1] copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) [1] copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) [1] copyover#2(nil, @outq) -> tuple#2(nil, @outq) [1] dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) [1] dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) [1] dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil)) [1] dequeue#2(nil, @inq) -> dequeue#3(@inq) [1] dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil)) [1] dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) [1] dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) [1] empty(@x) -> tuple#2(nil, nil) [1] enqueue(@x, @queue) -> enqueue#1(@queue, @x) [1] enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) [1] enqueues(@l, @queue) -> enqueues#1(@l, @queue) [1] enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) [1] enqueues#1(nil, @queue) -> @queue [1] startBreadth(@xs) -> startBreadth#1(@xs) [1] startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit))) [1] startBreadth#1(nil) -> nil [1] startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) [1] breadth#4(v0) -> nil [0] copyover#1(v0) -> nil [0] copyover#2(v0, v1) -> nil [0] enqueue#1(v0, v1) -> nil [0] enqueues#1(v0, v1) -> nil [0] dequeue#1(v0) -> nil [0] dequeue#2(v0, v1) -> nil [0] children#1(v0, v1, v2) -> nil [0] children#2(v0, v1) -> nil [0] children#3(v0, v1, v2, v3) -> nil [0] dequeue#3(v0) -> nil [0] dequeue#4(v0) -> nil [0] The TRS has the following type information: breadth :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 tuple#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 :: :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 nil :: tuple#2::::nil:tuple#4 breadth#5 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueues :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 tuple#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 empty :: #unit -> tuple#2::::nil:tuple#4 enqueue :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueue#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueues#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 startBreadth :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 startBreadth#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 startBreadth#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 #unit :: #unit Rewrite Strategy: INNERMOST ---------------------------------------- (213) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (214) 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: breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue#1(tuple#2(@breadth@1, @breadth@2))) [2] breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') [1] breadth#2(::(tuple#4(@children@3', @children@4', @children@5', @children@6'), @_@9), @queue') -> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), @queue') [2] breadth#2(::(@z, @_@9), @queue') -> breadth#3(nil, @queue') [1] breadth#2(nil, @queue') -> nil [1] breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues#1(@ys, @queue'))) [2] breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) [1] breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) [1] children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) [1] children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) [1] children#1(nil, @b, @l2) -> children#2(@l2, @b) [1] children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil, @ys), nil) [1] children#2(nil, @b) -> nil [1] children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil, @xs), ::(tuple#4(@x, @y, @xs, @ys), nil)) [1] children#3(nil, @b, @x, @xs) -> nil [1] copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) [1] copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) [1] copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) [1] copyover#2(nil, @outq) -> tuple#2(nil, @outq) [1] dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) [1] dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) [1] dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil)) [1] dequeue#2(nil, @inq) -> dequeue#3(@inq) [1] dequeue#3(::(@x, @xs)) -> dequeue#4(copyover#1(tuple#2(::(@x, @xs), nil))) [2] dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) [1] dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) [1] empty(@x) -> tuple#2(nil, nil) [1] enqueue(@x, @queue) -> enqueue#1(@queue, @x) [1] enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) [1] enqueues(@l, @queue) -> enqueues#1(@l, @queue) [1] enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue#1(@queue, @x)) [2] enqueues#1(nil, @queue) -> @queue [1] startBreadth(@xs) -> startBreadth#1(@xs) [1] startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), tuple#2(nil, nil))) [2] startBreadth#1(nil) -> nil [1] startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) [1] breadth#4(v0) -> nil [0] copyover#1(v0) -> nil [0] copyover#2(v0, v1) -> nil [0] enqueue#1(v0, v1) -> nil [0] enqueues#1(v0, v1) -> nil [0] dequeue#1(v0) -> nil [0] dequeue#2(v0, v1) -> nil [0] children#1(v0, v1, v2) -> nil [0] children#2(v0, v1) -> nil [0] children#3(v0, v1, v2, v3) -> nil [0] dequeue#3(v0) -> nil [0] dequeue#4(v0) -> nil [0] The TRS has the following type information: breadth :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 tuple#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 :: :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 breadth#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 nil :: tuple#2::::nil:tuple#4 breadth#5 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueues :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 tuple#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 children#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 copyover#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#3 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 dequeue#4 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 empty :: #unit -> tuple#2::::nil:tuple#4 enqueue :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueue#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 enqueues#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 startBreadth :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 startBreadth#1 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 startBreadth#2 :: tuple#2::::nil:tuple#4 -> tuple#2::::nil:tuple#4 #unit :: #unit Rewrite Strategy: INNERMOST ---------------------------------------- (215) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: nil => 0 #unit => 0 ---------------------------------------- (216) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + @breadth@1 + @breadth@2)) :|: @breadth@1 >= 0, z' = @breadth@2, @breadth@2 >= 0, z = @breadth@1 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), @queue') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, @queue' >= 0, @_@9 >= 0, z' = @queue' breadth#2(z, z') -{ 1 }-> breadth#3(0, @queue') :|: z = 1 + @z + @_@9, @queue' >= 0, @_@9 >= 0, z' = @queue', @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: @queue' >= 0, z = 0, z' = @queue' breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, @queue')) :|: @x >= 0, @queue' >= 0, @ys >= 0, z = 1 + @x + @ys, z' = @queue' breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + @a + @b) + children#1(@l1, @b, @l2) :|: z'' = @l1, @l1 >= 0, @a >= 0, @l2 >= 0, z = @a, z' = @b, @b >= 0, z1 = @l2 children#1(z, z', z'') -{ 1 }-> children#3(@l2, @b, @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z'' = @l2, @l2 >= 0, @xs >= 0, z' = @b, @b >= 0 children#1(z, z', z'') -{ 1 }-> children#2(@l2, @b) :|: z'' = @l2, @l2 >= 0, z' = @b, z = 0, @b >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 children#2(z, z') -{ 1 }-> 0 :|: z' = @b, z = 0, @b >= 0 children#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 children#2(z, z') -{ 1 }-> 1 + (1 + @y + @b + 0 + @ys) + 0 :|: z = 1 + @y + @ys, z' = @b, @y >= 0, @b >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: @x >= 0, z1 = @xs, @xs >= 0, z' = @b, z = 0, z'' = @x, @b >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + @x + @b + 0 + @xs) + (1 + (1 + @x + @y + @xs + @ys) + 0) :|: z = 1 + @y + @ys, @x >= 0, z1 = @xs, @xs >= 0, z' = @b, z'' = @x, @y >= 0, @b >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + @copyover@1 + @copyover@2) :|: @copyover@2 >= 0, z = @copyover@1, z' = @copyover@2, @copyover@1 >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + @outq) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @outq >= 0, z' = @outq copyover#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 copyover#2(z, z') -{ 1 }-> 1 + 0 + @outq :|: @outq >= 0, z' = @outq, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + @dequeue@1 + @dequeue@2) :|: @dequeue@2 >= 0, z = @dequeue@1, @dequeue@1 >= 0, z' = @dequeue@2 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 dequeue#2(z, z') -{ 1 }-> dequeue#3(@inq) :|: z' = @inq, @inq >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 dequeue#2(z, z') -{ 1 }-> 1 + (1 + @inq + @ys) + (1 + @y + 0) :|: z' = @inq, z = 1 + @y + @ys, @inq >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z = @x, @x >= 0 enqueue(z, z') -{ 1 }-> enqueue#1(@queue, @x) :|: @queue >= 0, z = @x, @x >= 0, z' = @queue enqueue#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueue#1(z, z') -{ 1 }-> 1 + (1 + @x + @inq) + @outq :|: z = 1 + @inq + @outq, @x >= 0, @inq >= 0, @outq >= 0, z' = @x enqueues(z, z') -{ 1 }-> enqueues#1(@l, @queue) :|: @queue >= 0, z = @l, @l >= 0, z' = @queue enqueues#1(z, z') -{ 1 }-> @queue :|: @queue >= 0, z' = @queue, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, enqueue#1(@queue, @x)) :|: @queue >= 0, @x >= 0, z = 1 + @x + @xs, z' = @queue, @xs >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 startBreadth(z) -{ 1 }-> startBreadth#1(@xs) :|: z = @xs, @xs >= 0 startBreadth#1(z) -{ 2 }-> startBreadth#2(enqueue(1 + @x + @x + @xs + @xs, 1 + 0 + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 ---------------------------------------- (217) InliningProof (UPPER BOUND(ID)) Inlined the following terminating rules on right-hand sides where appropriate: children#2(z, z') -{ 1 }-> 1 + (1 + @y + @b + 0 + @ys) + 0 :|: z = 1 + @y + @ys, z' = @b, @y >= 0, @b >= 0, @ys >= 0 children#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 children#2(z, z') -{ 1 }-> 0 :|: z' = @b, z = 0, @b >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: @x >= 0, z1 = @xs, @xs >= 0, z' = @b, z = 0, z'' = @x, @b >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + @x + @b + 0 + @xs) + (1 + (1 + @x + @y + @xs + @ys) + 0) :|: z = 1 + @y + @ys, @x >= 0, z1 = @xs, @xs >= 0, z' = @b, z'' = @x, @y >= 0, @b >= 0, @ys >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueue#1(z, z') -{ 1 }-> 1 + (1 + @x + @inq) + @outq :|: z = 1 + @inq + @outq, @x >= 0, @inq >= 0, @outq >= 0, z' = @x children#1(z, z', z'') -{ 1 }-> children#2(@l2, @b) :|: z'' = @l2, @l2 >= 0, z' = @b, z = 0, @b >= 0 children#1(z, z', z'') -{ 1 }-> children#3(@l2, @b, @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z'' = @l2, @l2 >= 0, @xs >= 0, z' = @b, @b >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 enqueue(z, z') -{ 1 }-> enqueue#1(@queue, @x) :|: @queue >= 0, z = @x, @x >= 0, z' = @queue ---------------------------------------- (218) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + @breadth@1 + @breadth@2)) :|: @breadth@1 >= 0, z' = @breadth@2, @breadth@2 >= 0, z = @breadth@1 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), @queue') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, @queue' >= 0, @_@9 >= 0, z' = @queue' breadth#2(z, z') -{ 1 }-> breadth#3(0, @queue') :|: z = 1 + @z + @_@9, @queue' >= 0, @_@9 >= 0, z' = @queue', @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: @queue' >= 0, z = 0, z' = @queue' breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, @queue')) :|: @x >= 0, @queue' >= 0, @ys >= 0, z = 1 + @x + @ys, z' = @queue' breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + @a + @b) + children#3(@l2', @b', @x, @xs) :|: z'' = @l1, @l1 >= 0, @a >= 0, @l2 >= 0, z = @a, z' = @b, @b >= 0, z1 = @l2, @x >= 0, @l1 = 1 + @x + @xs, @l2 = @l2', @l2' >= 0, @xs >= 0, @b = @b', @b' >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + @a + @b) + children#2(@l2', @b') :|: z'' = @l1, @l1 >= 0, @a >= 0, @l2 >= 0, z = @a, z' = @b, @b >= 0, z1 = @l2, @l2 = @l2', @l2' >= 0, @b = @b', @l1 = 0, @b' >= 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + @a + @b) + 0 :|: z'' = @l1, @l1 >= 0, @a >= 0, @l2 >= 0, z = @a, z' = @b, @b >= 0, z1 = @l2, v0 >= 0, @l2 = v2, v1 >= 0, @l1 = v0, @b = v1, v2 >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' = @l2, @l2 >= 0, z' = @b, z = 0, @b >= 0, v0 >= 0, v1 >= 0, @l2 = v0, @b = v1 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' = @l2, @l2 >= 0, z' = @b, z = 0, @b >= 0, @b = @b', @l2 = 0, @b' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' = @l2, @l2 >= 0, @xs >= 0, z' = @b, @b >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, @b = @b', @l2 = 0, @x = @x', @b' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' = @l2, @l2 >= 0, @xs >= 0, z' = @b, @b >= 0, @xs = v3, v0 >= 0, @x = v2, v1 >= 0, @l2 = v0, @b = v1, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + @b' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' = @l2, @l2 >= 0, @xs >= 0, z' = @b, @b >= 0, @l2 = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @b = @b', @x = @x', @y >= 0, @b' >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + @b' + 0 + @ys) + 0 :|: z'' = @l2, @l2 >= 0, z' = @b, z = 0, @b >= 0, @l2 = 1 + @y + @ys, @b = @b', @y >= 0, @b' >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z' = @b, z = 0, @b >= 0 children#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 children#2(z, z') -{ 1 }-> 1 + (1 + @y + @b + 0 + @ys) + 0 :|: z = 1 + @y + @ys, z' = @b, @y >= 0, @b >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: @x >= 0, z1 = @xs, @xs >= 0, z' = @b, z = 0, z'' = @x, @b >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + @x + @b + 0 + @xs) + (1 + (1 + @x + @y + @xs + @ys) + 0) :|: z = 1 + @y + @ys, @x >= 0, z1 = @xs, @xs >= 0, z' = @b, z'' = @x, @y >= 0, @b >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + @copyover@1 + @copyover@2) :|: @copyover@2 >= 0, z = @copyover@1, z' = @copyover@2, @copyover@1 >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + @outq) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @outq >= 0, z' = @outq copyover#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 copyover#2(z, z') -{ 1 }-> 1 + 0 + @outq :|: @outq >= 0, z' = @outq, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + @dequeue@1 + @dequeue@2) :|: @dequeue@2 >= 0, z = @dequeue@1, @dequeue@1 >= 0, z' = @dequeue@2 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 dequeue#2(z, z') -{ 1 }-> dequeue#3(@inq) :|: z' = @inq, @inq >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 dequeue#2(z, z') -{ 1 }-> 1 + (1 + @inq + @ys) + (1 + @y + 0) :|: z' = @inq, z = 1 + @y + @ys, @inq >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z = @x, @x >= 0 enqueue(z, z') -{ 1 }-> 0 :|: @queue >= 0, z = @x, @x >= 0, z' = @queue, v0 >= 0, v1 >= 0, @queue = v0, @x = v1 enqueue(z, z') -{ 2 }-> 1 + (1 + @x' + @inq) + @outq :|: @queue >= 0, z = @x, @x >= 0, z' = @queue, @queue = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueue#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueue#1(z, z') -{ 1 }-> 1 + (1 + @x + @inq) + @outq :|: z = 1 + @inq + @outq, @x >= 0, @inq >= 0, @outq >= 0, z' = @x enqueues(z, z') -{ 1 }-> enqueues#1(@l, @queue) :|: @queue >= 0, z = @l, @l >= 0, z' = @queue enqueues#1(z, z') -{ 1 }-> @queue :|: @queue >= 0, z' = @queue, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: @queue >= 0, @x >= 0, z = 1 + @x + @xs, z' = @queue, @xs >= 0, v0 >= 0, v1 >= 0, @queue = v0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: @queue >= 0, @x >= 0, z = 1 + @x + @xs, z' = @queue, @xs >= 0, @queue = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 startBreadth(z) -{ 1 }-> startBreadth#1(@xs) :|: z = @xs, @xs >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 ---------------------------------------- (219) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (220) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#3(z1, z', @x, @xs) :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 ---------------------------------------- (221) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { children#1 } { empty } { enqueue } { children#3 } { enqueue#1 } { children#2 } { enqueues#1, enqueues } { copyover#2, copyover#1, copyover } { children } { dequeue, dequeue#3, dequeue#1, dequeue#2, dequeue#4 } { breadth#3, breadth#5, breadth#1, breadth, breadth#2 } { breadth#4 } { startBreadth#2 } { startBreadth#1 } { startBreadth } ---------------------------------------- (222) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#3(z1, z', @x, @xs) :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {children#1}, {empty}, {enqueue}, {children#3}, {enqueue#1}, {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} ---------------------------------------- (223) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (224) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#3(z1, z', @x, @xs) :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {children#1}, {empty}, {enqueue}, {children#3}, {enqueue#1}, {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} ---------------------------------------- (225) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: children#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + 2*z + z' + z'' ---------------------------------------- (226) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#3(z1, z', @x, @xs) :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {children#1}, {empty}, {enqueue}, {children#3}, {enqueue#1}, {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: ?, size: O(n^1) [1 + 2*z + z' + z''] ---------------------------------------- (227) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: children#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (228) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#3(z1, z', @x, @xs) :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {empty}, {enqueue}, {children#3}, {enqueue#1}, {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] ---------------------------------------- (229) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (230) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#3(z1, z', @x, @xs) :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {empty}, {enqueue}, {children#3}, {enqueue#1}, {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] ---------------------------------------- (231) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: empty after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (232) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#3(z1, z', @x, @xs) :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {empty}, {enqueue}, {children#3}, {enqueue#1}, {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: ?, size: O(1) [1] ---------------------------------------- (233) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: empty after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (234) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#3(z1, z', @x, @xs) :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {enqueue}, {children#3}, {enqueue#1}, {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (235) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (236) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#3(z1, z', @x, @xs) :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {enqueue}, {children#3}, {enqueue#1}, {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (237) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: enqueue after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z + z' ---------------------------------------- (238) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#3(z1, z', @x, @xs) :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {enqueue}, {children#3}, {enqueue#1}, {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] enqueue: runtime: ?, size: O(n^1) [1 + z + z'] ---------------------------------------- (239) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: enqueue after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (240) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#3(z1, z', @x, @xs) :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {children#3}, {enqueue#1}, {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] ---------------------------------------- (241) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (242) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#3(z1, z', @x, @xs) :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {children#3}, {enqueue#1}, {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] ---------------------------------------- (243) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: children#3 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 3 + z + z' + 2*z'' + 2*z1 ---------------------------------------- (244) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#3(z1, z', @x, @xs) :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {children#3}, {enqueue#1}, {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] children#3: runtime: ?, size: O(n^1) [3 + z + z' + 2*z'' + 2*z1] ---------------------------------------- (245) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: children#3 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (246) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#3(z1, z', @x, @xs) :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {enqueue#1}, {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] children#3: runtime: O(1) [1], size: O(n^1) [3 + z + z' + 2*z'' + 2*z1] ---------------------------------------- (247) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (248) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s :|: s >= 0, s <= z1 + z' + 2 * @x + 2 * @xs + 3, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {enqueue#1}, {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] children#3: runtime: O(1) [1], size: O(n^1) [3 + z + z' + 2*z'' + 2*z1] ---------------------------------------- (249) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: enqueue#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z + z' ---------------------------------------- (250) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s :|: s >= 0, s <= z1 + z' + 2 * @x + 2 * @xs + 3, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {enqueue#1}, {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] children#3: runtime: O(1) [1], size: O(n^1) [3 + z + z' + 2*z'' + 2*z1] enqueue#1: runtime: ?, size: O(n^1) [1 + z + z'] ---------------------------------------- (251) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: enqueue#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (252) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s :|: s >= 0, s <= z1 + z' + 2 * @x + 2 * @xs + 3, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 3 }-> startBreadth#2(enqueue#1(@queue, @x')) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] children#3: runtime: O(1) [1], size: O(n^1) [3 + z + z' + 2*z'' + 2*z1] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] ---------------------------------------- (253) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (254) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s :|: s >= 0, s <= z1 + z' + 2 * @x + 2 * @xs + 3, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 4 }-> startBreadth#2(s') :|: s' >= 0, s' <= @queue + @x' + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] children#3: runtime: O(1) [1], size: O(n^1) [3 + z + z' + 2*z'' + 2*z1] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] ---------------------------------------- (255) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: children#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z + z' ---------------------------------------- (256) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s :|: s >= 0, s <= z1 + z' + 2 * @x + 2 * @xs + 3, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 4 }-> startBreadth#2(s') :|: s' >= 0, s' <= @queue + @x' + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {children#2}, {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] children#3: runtime: O(1) [1], size: O(n^1) [3 + z + z' + 2*z'' + 2*z1] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] children#2: runtime: ?, size: O(n^1) [1 + z + z'] ---------------------------------------- (257) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: children#2 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (258) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s :|: s >= 0, s <= z1 + z' + 2 * @x + 2 * @xs + 3, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 2 }-> 1 + (1 + z + z') + children#2(z1, z') :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 4 }-> startBreadth#2(s') :|: s' >= 0, s' <= @queue + @x' + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] children#3: runtime: O(1) [1], size: O(n^1) [3 + z + z' + 2*z'' + 2*z1] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] children#2: runtime: O(1) [1], size: O(n^1) [1 + z + z'] ---------------------------------------- (259) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (260) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s :|: s >= 0, s <= z1 + z' + 2 * @x + 2 * @xs + 3, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s'' :|: s'' >= 0, s'' <= z1 + z' + 1, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 4 }-> startBreadth#2(s') :|: s' >= 0, s' <= @queue + @x' + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] children#3: runtime: O(1) [1], size: O(n^1) [3 + z + z' + 2*z'' + 2*z1] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] children#2: runtime: O(1) [1], size: O(n^1) [1 + z + z'] ---------------------------------------- (261) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: enqueues#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z + z' Computed SIZE bound using CoFloCo for: enqueues after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z + z' ---------------------------------------- (262) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s :|: s >= 0, s <= z1 + z' + 2 * @x + 2 * @xs + 3, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s'' :|: s'' >= 0, s'' <= z1 + z' + 1, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 4 }-> startBreadth#2(s') :|: s' >= 0, s' <= @queue + @x' + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {enqueues#1,enqueues}, {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] children#3: runtime: O(1) [1], size: O(n^1) [3 + z + z' + 2*z'' + 2*z1] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] children#2: runtime: O(1) [1], size: O(n^1) [1 + z + z'] enqueues#1: runtime: ?, size: O(n^1) [z + z'] enqueues: runtime: ?, size: O(n^1) [z + z'] ---------------------------------------- (263) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: enqueues#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 7 + 4*z Computed RUNTIME bound using CoFloCo for: enqueues after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 8 + 4*z ---------------------------------------- (264) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 2 }-> 1 + @x + breadth#5(enqueues#1(@ys, z')) :|: @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s :|: s >= 0, s <= z1 + z' + 2 * @x + 2 * @xs + 3, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s'' :|: s'' >= 0, s'' <= z1 + z' + 1, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 1 }-> enqueues#1(z, z') :|: z' >= 0, z >= 0 enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 2 }-> enqueues(@xs, 0) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 3 }-> enqueues(@xs, 1 + (1 + @x' + @inq) + @outq) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 4 }-> startBreadth#2(s') :|: s' >= 0, s' <= @queue + @x' + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] children#3: runtime: O(1) [1], size: O(n^1) [3 + z + z' + 2*z'' + 2*z1] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] children#2: runtime: O(1) [1], size: O(n^1) [1 + z + z'] enqueues#1: runtime: O(n^1) [7 + 4*z], size: O(n^1) [z + z'] enqueues: runtime: O(n^1) [8 + 4*z], size: O(n^1) [z + z'] ---------------------------------------- (265) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (266) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 9 + 4*@ys }-> 1 + @x + breadth#5(s1) :|: s1 >= 0, s1 <= @ys + z', @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s :|: s >= 0, s <= z1 + z' + 2 * @x + 2 * @xs + 3, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s'' :|: s'' >= 0, s'' <= z1 + z' + 1, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 8 + 4*z }-> s2 :|: s2 >= 0, s2 <= z + z', z' >= 0, z >= 0 enqueues#1(z, z') -{ 10 + 4*@xs }-> s3 :|: s3 >= 0, s3 <= @xs + 0, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 11 + 4*@xs }-> s4 :|: s4 >= 0, s4 <= @xs + (1 + (1 + @x' + @inq) + @outq), z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 4 }-> startBreadth#2(s') :|: s' >= 0, s' <= @queue + @x' + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] children#3: runtime: O(1) [1], size: O(n^1) [3 + z + z' + 2*z'' + 2*z1] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] children#2: runtime: O(1) [1], size: O(n^1) [1 + z + z'] enqueues#1: runtime: O(n^1) [7 + 4*z], size: O(n^1) [z + z'] enqueues: runtime: O(n^1) [8 + 4*z], size: O(n^1) [z + z'] ---------------------------------------- (267) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: copyover#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z + z' Computed SIZE bound using CoFloCo for: copyover#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z Computed SIZE bound using CoFloCo for: copyover after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z + z' ---------------------------------------- (268) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 9 + 4*@ys }-> 1 + @x + breadth#5(s1) :|: s1 >= 0, s1 <= @ys + z', @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s :|: s >= 0, s <= z1 + z' + 2 * @x + 2 * @xs + 3, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s'' :|: s'' >= 0, s'' <= z1 + z' + 1, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 8 + 4*z }-> s2 :|: s2 >= 0, s2 <= z + z', z' >= 0, z >= 0 enqueues#1(z, z') -{ 10 + 4*@xs }-> s3 :|: s3 >= 0, s3 <= @xs + 0, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 11 + 4*@xs }-> s4 :|: s4 >= 0, s4 <= @xs + (1 + (1 + @x' + @inq) + @outq), z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 4 }-> startBreadth#2(s') :|: s' >= 0, s' <= @queue + @x' + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] children#3: runtime: O(1) [1], size: O(n^1) [3 + z + z' + 2*z'' + 2*z1] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] children#2: runtime: O(1) [1], size: O(n^1) [1 + z + z'] enqueues#1: runtime: O(n^1) [7 + 4*z], size: O(n^1) [z + z'] enqueues: runtime: O(n^1) [8 + 4*z], size: O(n^1) [z + z'] copyover#2: runtime: ?, size: O(n^1) [1 + z + z'] copyover#1: runtime: ?, size: O(n^1) [z] copyover: runtime: ?, size: O(n^1) [1 + z + z'] ---------------------------------------- (269) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: copyover#2 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (270) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 2 }-> breadth#1(dequeue#1(1 + z + z')) :|: z >= 0, z' >= 0 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#2(z, z') -{ 2 }-> breadth#3(children(@children@3', @children@4', @children@5', @children@6'), z') :|: @children@5' >= 0, z = 1 + (1 + @children@3' + @children@4' + @children@5' + @children@6') + @_@9, @children@3' >= 0, @children@4' >= 0, @children@6' >= 0, z' >= 0, @_@9 >= 0 breadth#2(z, z') -{ 1 }-> breadth#3(0, z') :|: z = 1 + @z + @_@9, z' >= 0, @_@9 >= 0, @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 breadth#3(z, z') -{ 9 + 4*@ys }-> 1 + @x + breadth#5(s1) :|: s1 >= 0, s1 <= @ys + z', @x >= 0, z' >= 0, @ys >= 0, z = 1 + @x + @ys breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: z >= 0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s :|: s >= 0, s <= z1 + z' + 2 * @x + 2 * @xs + 3, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, @x >= 0, z'' = 1 + @x + @xs, @xs >= 0 children(z, z', z'', z1) -{ 3 }-> 1 + (1 + z + z') + s'' :|: s'' >= 0, s'' <= z1 + z' + 1, z'' >= 0, z >= 0, z1 >= 0, z' >= 0, z'' = 0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + z + z') + 0 :|: z'' >= 0, z >= 0, z1 >= 0, z' >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 children#1(z, z', z'') -{ 1 }-> 0 :|: z'' >= 0, z = 0, z' >= 0 children#1(z, z', z'') -{ 2 }-> 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 0 children#1(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @x' >= 0, @xs = @xs', @xs' >= 0, z'' = 0, @x = @x' children#1(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, @xs = v3, @x = v2, v2 >= 0, v3 >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @x' + z' + 0 + @xs') + (1 + (1 + @x' + @y + @xs' + @ys) + 0) :|: @x >= 0, z = 1 + @x + @xs, z'' >= 0, @xs >= 0, z' >= 0, z'' = 1 + @y + @ys, @x' >= 0, @xs = @xs', @xs' >= 0, @x = @x', @y >= 0, @ys >= 0 children#1(z, z', z'') -{ 2 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z'' >= 0, z = 0, z' >= 0, z'' = 1 + @y + @ys, @y >= 0, @ys >= 0 children#2(z, z') -{ 1 }-> 0 :|: z = 0, z' >= 0 children#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 children#2(z, z') -{ 1 }-> 1 + (1 + @y + z' + 0 + @ys) + 0 :|: z = 1 + @y + @ys, @y >= 0, z' >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: z'' >= 0, z1 >= 0, z = 0, z' >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z'' + z' + 0 + z1) + (1 + (1 + z'' + @y + z1 + @ys) + 0) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, z' >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + z + z') :|: z' >= 0, z >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: z >= 0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 copyover#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 copyover#2(z, z') -{ 1 }-> 1 + 0 + z' :|: z' >= 0, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + z + z') :|: z' >= 0, z >= 0 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: z >= 0 dequeue#2(z, z') -{ 1 }-> dequeue#3(z') :|: z' >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 dequeue#2(z, z') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + @y + 0) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 2 }-> dequeue#4(copyover#1(1 + (1 + @x + @xs) + 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: z >= 0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: z >= 0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z >= 0 enqueue(z, z') -{ 1 }-> 0 :|: z' >= 0, z >= 0 enqueue(z, z') -{ 2 }-> 1 + (1 + z + @inq) + @outq :|: z' >= 0, z >= 0, z' = 1 + @inq + @outq, @inq >= 0, @outq >= 0 enqueue#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 enqueue#1(z, z') -{ 1 }-> 1 + (1 + z' + @inq) + @outq :|: z = 1 + @inq + @outq, z' >= 0, @inq >= 0, @outq >= 0 enqueues(z, z') -{ 8 + 4*z }-> s2 :|: s2 >= 0, s2 <= z + z', z' >= 0, z >= 0 enqueues#1(z, z') -{ 10 + 4*@xs }-> s3 :|: s3 >= 0, s3 <= @xs + 0, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, v1 >= 0, @x = v1 enqueues#1(z, z') -{ 11 + 4*@xs }-> s4 :|: s4 >= 0, s4 <= @xs + (1 + (1 + @x' + @inq) + @outq), z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = 1 + @inq + @outq, @x' >= 0, @inq >= 0, @outq >= 0, @x = @x' enqueues#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 enqueues#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 startBreadth(z) -{ 1 }-> startBreadth#1(z) :|: z >= 0 startBreadth#1(z) -{ 4 }-> startBreadth#2(s') :|: s' >= 0, s' <= @queue + @x' + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @queue >= 0, 1 + @x + @x + @xs + @xs = @x', @x' >= 0, 1 + 0 + 0 = @queue startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 Function symbols to be analyzed: {copyover#2,copyover#1,copyover}, {children}, {dequeue,dequeue#3,dequeue#1,dequeue#2,dequeue#4}, {breadth#3,breadth#5,breadth#1,breadth,breadth#2}, {breadth#4}, {startBreadth#2}, {startBreadth#1}, {startBreadth} Previous analysis results are: children#1: runtime: O(1) [2], size: O(n^1) [1 + 2*z + z' + z''] empty: runtime: O(1) [1], size: O(1) [1] enqueue: runtime: O(1) [2], size: O(n^1) [1 + z + z'] children#3: runtime: O(1) [1], size: O(n^1) [3 + z + z' + 2*z'' + 2*z1] enqueue#1: runtime: O(1) [1], size: O(n^1) [1 + z + z'] children#2: runtime: O(1) [1], size: O(n^1) [1 + z + z'] enqueues#1: runtime: O(n^1) [7 + 4*z], size: O(n^1) [z + z'] enqueues: runtime: O(n^1) [8 + 4*z], size: O(n^1) [z + z'] copyover#2: runtime: INF, size: O(n^1) [1 + z + z'] copyover#1: runtime: ?, size: O(n^1) [z] copyover: runtime: ?, size: O(n^1) [1 + z + z'] ---------------------------------------- (271) 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: breadth#1(v0) -> null_breadth#1 [0] breadth#2(v0, v1) -> null_breadth#2 [0] breadth#3(v0, v1) -> null_breadth#3 [0] breadth#4(v0) -> null_breadth#4 [0] breadth#5(v0) -> null_breadth#5 [0] children#1(v0, v1, v2) -> null_children#1 [0] children#2(v0, v1) -> null_children#2 [0] children#3(v0, v1, v2, v3) -> null_children#3 [0] copyover#1(v0) -> null_copyover#1 [0] copyover#2(v0, v1) -> null_copyover#2 [0] dequeue#1(v0) -> null_dequeue#1 [0] dequeue#2(v0, v1) -> null_dequeue#2 [0] dequeue#3(v0) -> null_dequeue#3 [0] dequeue#4(v0) -> null_dequeue#4 [0] enqueue#1(v0, v1) -> null_enqueue#1 [0] enqueues#1(v0, v1) -> null_enqueues#1 [0] startBreadth#1(v0) -> null_startBreadth#1 [0] startBreadth#2(v0) -> null_startBreadth#2 [0] And the following fresh constants: null_breadth#1, null_breadth#2, null_breadth#3, null_breadth#4, null_breadth#5, null_children#1, null_children#2, null_children#3, null_copyover#1, null_copyover#2, null_dequeue#1, null_dequeue#2, null_dequeue#3, null_dequeue#4, null_enqueue#1, null_enqueues#1, null_startBreadth#1, null_startBreadth#2 ---------------------------------------- (272) 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: breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue(@breadth@1, @breadth@2)) [1] breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') [1] breadth#2(::(@z, @_@9), @queue') -> breadth#3(breadth#4(@z), @queue') [1] breadth#2(nil, @queue') -> nil [1] breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues(@ys, @queue'))) [1] breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) [1] breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) [1] children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) [1] children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) [1] children#1(nil, @b, @l2) -> children#2(@l2, @b) [1] children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil, @ys), nil) [1] children#2(nil, @b) -> nil [1] children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil, @xs), ::(tuple#4(@x, @y, @xs, @ys), nil)) [1] children#3(nil, @b, @x, @xs) -> nil [1] copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) [1] copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) [1] copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) [1] copyover#2(nil, @outq) -> tuple#2(nil, @outq) [1] dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) [1] dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) [1] dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil)) [1] dequeue#2(nil, @inq) -> dequeue#3(@inq) [1] dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil)) [1] dequeue#3(nil) -> tuple#2(tuple#2(nil, nil), nil) [1] dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) [1] empty(@x) -> tuple#2(nil, nil) [1] enqueue(@x, @queue) -> enqueue#1(@queue, @x) [1] enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) [1] enqueues(@l, @queue) -> enqueues#1(@l, @queue) [1] enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) [1] enqueues#1(nil, @queue) -> @queue [1] startBreadth(@xs) -> startBreadth#1(@xs) [1] startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit))) [1] startBreadth#1(nil) -> nil [1] startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) [1] breadth#1(v0) -> null_breadth#1 [0] breadth#2(v0, v1) -> null_breadth#2 [0] breadth#3(v0, v1) -> null_breadth#3 [0] breadth#4(v0) -> null_breadth#4 [0] breadth#5(v0) -> null_breadth#5 [0] children#1(v0, v1, v2) -> null_children#1 [0] children#2(v0, v1) -> null_children#2 [0] children#3(v0, v1, v2, v3) -> null_children#3 [0] copyover#1(v0) -> null_copyover#1 [0] copyover#2(v0, v1) -> null_copyover#2 [0] dequeue#1(v0) -> null_dequeue#1 [0] dequeue#2(v0, v1) -> null_dequeue#2 [0] dequeue#3(v0) -> null_dequeue#3 [0] dequeue#4(v0) -> null_dequeue#4 [0] enqueue#1(v0, v1) -> null_enqueue#1 [0] enqueues#1(v0, v1) -> null_enqueues#1 [0] startBreadth#1(v0) -> null_startBreadth#1 [0] startBreadth#2(v0) -> null_startBreadth#2 [0] The TRS has the following type information: breadth :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 breadth#1 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 dequeue :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 tuple#2 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 breadth#2 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 :: :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 breadth#3 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 breadth#4 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 nil :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 breadth#5 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 enqueues :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 tuple#4 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 children :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 children#1 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 children#3 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 children#2 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 copyover :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 copyover#1 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 copyover#2 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 dequeue#1 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 dequeue#2 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 dequeue#3 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 dequeue#4 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 empty :: #unit -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 enqueue :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 enqueue#1 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 enqueues#1 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 startBreadth :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 startBreadth#1 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 startBreadth#2 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 -> tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 #unit :: #unit null_breadth#1 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 null_breadth#2 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 null_breadth#3 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 null_breadth#4 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 null_breadth#5 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 null_children#1 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 null_children#2 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 null_children#3 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 null_copyover#1 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 null_copyover#2 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 null_dequeue#1 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 null_dequeue#2 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 null_dequeue#3 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 null_dequeue#4 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 null_enqueue#1 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 null_enqueues#1 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 null_startBreadth#1 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 null_startBreadth#2 :: tuple#2::::nil:tuple#4:null_breadth#1:null_breadth#2:null_breadth#3:null_breadth#4:null_breadth#5:null_children#1:null_children#2:null_children#3:null_copyover#1:null_copyover#2:null_dequeue#1:null_dequeue#2:null_dequeue#3:null_dequeue#4:null_enqueue#1:null_enqueues#1:null_startBreadth#1:null_startBreadth#2 Rewrite Strategy: INNERMOST ---------------------------------------- (273) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: nil => 0 #unit => 0 null_breadth#1 => 0 null_breadth#2 => 0 null_breadth#3 => 0 null_breadth#4 => 0 null_breadth#5 => 0 null_children#1 => 0 null_children#2 => 0 null_children#3 => 0 null_copyover#1 => 0 null_copyover#2 => 0 null_dequeue#1 => 0 null_dequeue#2 => 0 null_dequeue#3 => 0 null_dequeue#4 => 0 null_enqueue#1 => 0 null_enqueues#1 => 0 null_startBreadth#1 => 0 null_startBreadth#2 => 0 ---------------------------------------- (274) Obligation: Complexity RNTS consisting of the following rules: breadth(z, z') -{ 1 }-> breadth#1(dequeue(@breadth@1, @breadth@2)) :|: @breadth@1 >= 0, z' = @breadth@2, @breadth@2 >= 0, z = @breadth@1 breadth#1(z) -{ 1 }-> breadth#2(@elem, @queue') :|: z = 1 + @queue' + @elem, @elem >= 0, @queue' >= 0 breadth#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 breadth#2(z, z') -{ 1 }-> breadth#3(breadth#4(@z), @queue') :|: z = 1 + @z + @_@9, @queue' >= 0, @_@9 >= 0, z' = @queue', @z >= 0 breadth#2(z, z') -{ 1 }-> 0 :|: @queue' >= 0, z = 0, z' = @queue' breadth#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 breadth#3(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 breadth#3(z, z') -{ 1 }-> 1 + @x + breadth#5(enqueues(@ys, @queue')) :|: @x >= 0, @queue' >= 0, @ys >= 0, z = 1 + @x + @ys, z' = @queue' breadth#4(z) -{ 1 }-> children(@children@3, @children@4, @children@5, @children@6) :|: @children@4 >= 0, @children@5 >= 0, @children@6 >= 0, @children@3 >= 0, z = 1 + @children@3 + @children@4 + @children@5 + @children@6 breadth#4(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 breadth#5(z) -{ 1 }-> breadth(@breadth@7, @breadth@8) :|: @breadth@8 >= 0, z = 1 + @breadth@7 + @breadth@8, @breadth@7 >= 0 breadth#5(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 children(z, z', z'', z1) -{ 1 }-> 1 + (1 + @a + @b) + children#1(@l1, @b, @l2) :|: z'' = @l1, @l1 >= 0, @a >= 0, @l2 >= 0, z = @a, z' = @b, @b >= 0, z1 = @l2 children#1(z, z', z'') -{ 1 }-> children#3(@l2, @b, @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z'' = @l2, @l2 >= 0, @xs >= 0, z' = @b, @b >= 0 children#1(z, z', z'') -{ 1 }-> children#2(@l2, @b) :|: z'' = @l2, @l2 >= 0, z' = @b, z = 0, @b >= 0 children#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 children#2(z, z') -{ 1 }-> 0 :|: z' = @b, z = 0, @b >= 0 children#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 children#2(z, z') -{ 1 }-> 1 + (1 + @y + @b + 0 + @ys) + 0 :|: z = 1 + @y + @ys, z' = @b, @y >= 0, @b >= 0, @ys >= 0 children#3(z, z', z'', z1) -{ 1 }-> 0 :|: @x >= 0, z1 = @xs, @xs >= 0, z' = @b, z = 0, z'' = @x, @b >= 0 children#3(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 children#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + @x + @b + 0 + @xs) + (1 + (1 + @x + @y + @xs + @ys) + 0) :|: z = 1 + @y + @ys, @x >= 0, z1 = @xs, @xs >= 0, z' = @b, z'' = @x, @y >= 0, @b >= 0, @ys >= 0 copyover(z, z') -{ 1 }-> copyover#1(1 + @copyover@1 + @copyover@2) :|: @copyover@2 >= 0, z = @copyover@1, z' = @copyover@2, @copyover@1 >= 0 copyover#1(z) -{ 1 }-> copyover#2(@inq, @outq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 copyover#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 copyover#2(z, z') -{ 1 }-> copyover(@xs, 1 + @x + @outq) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, @outq >= 0, z' = @outq copyover#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 copyover#2(z, z') -{ 1 }-> 1 + 0 + @outq :|: @outq >= 0, z' = @outq, z = 0 dequeue(z, z') -{ 1 }-> dequeue#1(1 + @dequeue@1 + @dequeue@2) :|: @dequeue@2 >= 0, z = @dequeue@1, @dequeue@1 >= 0, z' = @dequeue@2 dequeue#1(z) -{ 1 }-> dequeue#2(@outq, @inq) :|: z = 1 + @inq + @outq, @inq >= 0, @outq >= 0 dequeue#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 dequeue#2(z, z') -{ 1 }-> dequeue#3(@inq) :|: z' = @inq, @inq >= 0, z = 0 dequeue#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 dequeue#2(z, z') -{ 1 }-> 1 + (1 + @inq + @ys) + (1 + @y + 0) :|: z' = @inq, z = 1 + @y + @ys, @inq >= 0, @y >= 0, @ys >= 0 dequeue#3(z) -{ 1 }-> dequeue#4(copyover(1 + @x + @xs, 0)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 dequeue#3(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 dequeue#3(z) -{ 1 }-> 1 + (1 + 0 + 0) + 0 :|: z = 0 dequeue#4(z) -{ 1 }-> dequeue(@dequeue@3, @dequeue@4) :|: @dequeue@3 >= 0, @dequeue@4 >= 0, z = 1 + @dequeue@3 + @dequeue@4 dequeue#4(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 empty(z) -{ 1 }-> 1 + 0 + 0 :|: z = @x, @x >= 0 enqueue(z, z') -{ 1 }-> enqueue#1(@queue, @x) :|: @queue >= 0, z = @x, @x >= 0, z' = @queue enqueue#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 enqueue#1(z, z') -{ 1 }-> 1 + (1 + @x + @inq) + @outq :|: z = 1 + @inq + @outq, @x >= 0, @inq >= 0, @outq >= 0, z' = @x enqueues(z, z') -{ 1 }-> enqueues#1(@l, @queue) :|: @queue >= 0, z = @l, @l >= 0, z' = @queue enqueues#1(z, z') -{ 1 }-> @queue :|: @queue >= 0, z' = @queue, z = 0 enqueues#1(z, z') -{ 1 }-> enqueues(@xs, enqueue(@x, @queue)) :|: @queue >= 0, @x >= 0, z = 1 + @x + @xs, z' = @queue, @xs >= 0 enqueues#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 startBreadth(z) -{ 1 }-> startBreadth#1(@xs) :|: z = @xs, @xs >= 0 startBreadth#1(z) -{ 1 }-> startBreadth#2(enqueue(1 + @x + @x + @xs + @xs, empty(0))) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 startBreadth#1(z) -{ 1 }-> 0 :|: z = 0 startBreadth#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 startBreadth#2(z) -{ 1 }-> breadth(@breadth@1, @breadth@2) :|: @breadth@1 >= 0, @breadth@2 >= 0, z = 1 + @breadth@1 + @breadth@2 startBreadth#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 Only complete derivations are relevant for the runtime complexity.